CF978B

和atcoder有道题很像 abc394的c题,也是倒着来处理所有的wa
关键点在于倒着处理
从 0 下标开始处理的问题:
当你从 0 下标开始处理时,一旦移除了一个字符,字符串的长度就会减少,并且后续字符的下标会发生改变。这样一来,循环里的下标 i 就不能正确地指向你期望的字符位置,从而造成遗漏或者错误处理。
举个例子,假设字符串是 "xxx",当 i = 0 时,检测到连续的三个 x,移除 s[0] 后,字符串变为 "xx"。此时,循环变量 i 增加到 1,然而原本的 s[1] 现在变成了 s[0],这样就会遗漏对新的 s[0] 的检查。
倒着处理的优势:
倒着处理时,从字符串的末尾开始,即使移除了一个字符,前面字符的下标也不会改变,所以不会出现遗漏检查的情况。

#include<iostream>
#include<algorithm>
#include<cstring>

using namespace std;

int main(){
    int n;
    cin >> n;
    string s;
    cin >> s;
    for(int i = n - 3; i >= 0; i--){
        if(s[i] == 'x' && s[i + 1] == 'x' && s[i + 2] == 'x'){
            s.erase(i, 1);
        }
    }
    cout << n - s.size() << endl;
    return 0;
}
posted @ 2025-04-03 10:02  啦啦啦456123  阅读(18)  评论(0)    收藏  举报