C++算法题(不是很难)

贝西和埃尔西正在密谋最终推翻农夫约翰!他们通过N(1≤N≤2*10^5)条短信进行计划。他们的对话可以用长度为N的字符串S表示,其中Si是B或E,这意味着第i条消息分别由Bessie或Elsie发送。

然而,农夫约翰听说了这个计划,并试图拦截他们的谈话。因此,S的一些字母是F,这意味着Farmer John混淆了信息,发件人未知,也就是说'F'既可能是'B'也可能是'E'。

非模糊对话的兴奋程度是奶牛重复发送的次数,也就是说,子串BB或EE在S中出现的次数。你想找到原始信息的兴奋程度,但你不知道Farmer John的哪些信息实际上是Bessie/Elsie的。在所有可能的情况下,输出S的所有可能的兴奋水平。

INPUT FORMAT(输入来自终端/stdin):

第一行将由一个整数N组成。

下一行包含S。

OUTPUT FORMAT(将输出打印到终端/stdout):

第一个输出K,可能的不同兴奋水平的数量。在接下来的K行中,按递增顺序输出兴奋程度。

样本输入:

4
BEEF

样本输出:

2
1
2

样本输入:

9
FEBFEBFEB

样本输出:

2
2
3

样本输入:

10
BFFFFFEBFE

样本输出:

3
2
4
6
希望能各位帮忙解决此问题,最好给出代码和思路,谢谢!(不要超时哦1000ms)

参考GPT和自己的思路:这道题可以用枚举的方法,枚举所有可能的F是B还是E,然后分别统计BB和EE的个数,最后输出所有可能的兴奋程度。

具体实现可以用一个循环枚举F是B还是E,然后用两个变量分别记录统计得到的BB和EE的个数,最后将BB和EE的个数相加即可得到当前情况下的兴奋程度。最后将所有可能的兴奋程度存储在一个数组中并排序,最后输出数组中所有不同的元素即可。

代码如下: