输入:规则,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;
}