题解:P12310 [ICPC 2022 WF] 压缩

· · 题解

又是一道难(shui)题。

分析

  1. 检查当前末尾是否存在两个相邻相等的子串
  2. 如果存在,就删去其中一个。
  3. 不断重复这个过程,直到无法再压缩。
    #include <bits/stdc++.h>
    using namespace std;
    int main()
    {
    string s, res;
    cin >> s;
    for (char c : s)
    {
        res += c;
        int len = res.size();//长度
        for (int l = 1; l * 2 <= len; ++l)
        {
            if (res.substr(len - 2 * l, l) == res.substr(len - l, l))
            {
                res.erase(len - l, l);//去除相等的子串中一个
                break;
            }
        }
    }
    cout << res << '\n';//输出
    return 0;
    }