状态机
今日刷到一道AC题,是对字符串的处理。在下方评论区看见一个大神用状态机解答,相当简洁清晰,顿觉耳目一新,特此记录。
题目如下:
解答如下:
#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,忽略即可
else
state = 2;//进入状态3:AAB形式
break;
}
case 2:
{
if (cur == last)
continue;//AABB,忽略即可
else
state = 0;//AABC,就是状态0
break;
}
default:
break;
}
ans = ans + cur;
last = cur;
}
cout << ans << endl;
}
return 0;
}
直呼牛皮!!!
-----------------------------------侵删---------------------------------