输入:规则,AAA则忽略最后一个A输出AA,AABB输出AAB忽略最后一个B, AABBCC则输出AABCC从左到右连续两个。 2 helloo wooooooow
输出: hello woow
解析:有限状态机。因为下一个的状态需要上一个的状态决定,所以用此方法。
#include<iostream>
#include<string>
using namespace std;
int main() {
//自动机
int n;
cin >> n;
while (n--) {
int state = 0;//初始化为状态0
char cur;//当前字符
string str;//目标字符串
cin >> str;
char last = str[0];//初始化为第一个字符
string ans = "";
ans += str[0];//初始化
for (int i = 1; i < str.size(); ++i) {//开始
cur = str[i];
switch (state)
{
case 0:
{
if (cur == last)//如果是相等的,进入状态1,否则继续状态0;
state = 1; //进入状态1:AA形式
else state = 0; //继续状态0:AB形式,即正常形式
break;
}
case 1:
{
if (cur == last)
continue;//AAA,忽略即可,下面的所有代码都不会执行。直接新的for循环,所以这个字符就忽略掉了
else
state = 2;//进入状态3:AAB形式
break;
}
case 2:
{
if (cur == last)
continue;//AABB,忽略即可,下面的所有代码都不会执行。直接新的for循环,所以这个字符就忽略掉了
else
state = 0;//AABC,就是状态0
break;
}
default:
break;
}
ans = ans + cur;
last = cur;
}
cout << ans << endl;
}
return 0;
} 
京公网安备 11010502036488号