Skip to content

字符串删减

Original Link

思想

  • 使用双指针。
  • 遍历字符串 s,用一个指针 i 从左到右扫描。
  • 当遇到一个 'x' 时,记录当前位置为 j,然后让 i 继续向后走。
  • 在内层循环中,当 s[i] == 'x' 并且 i - j == 2 时(意味着从 ji 这一段 "xxx" 被找到了),则需要删除这个子串。在此代码实现中,我们通过将计数器 res 加一并移动 j 指针来模拟删除。
  • res 最终记录需要删除的 'x' 的总数量(即需要删除的子串 "xxx" 的个数)。

代码

cpp
#include <bits/stdc++.h>
using namespace std;

void solve(){
    int n; string s;
    cin >> n >> s;
    int res = 0;
    for(int i = 0; i < s.size(); i ++){
        if(s[i] == 'x'){
            int j = i;
            while(i < s.size() && s[i] == 'x'){   // 指针  j   i 
                if(i - j == 2) res ++, j ++;      // 下标  2 3 4
                i ++;                             // s[i]  x x x
            }                                  // i - j = 2 说明存在连续的 "xxx"
        }
    }
    cout << res << endl;
}

int main(){
    solve();
    return 0;
}