Original Link
思想:
- 双指针。
- 快指针
i
作为某一连续的"xxx"
区间的右端点,慢指针j
作为该连续的"xxx"
区间的左端点; - 遍历字符串
s
,当s[i] == 'x'
时,将j = i
标记为左端点,i
不断向后推进:- 满足
s[i] == 'x'
且i - j == 2
时说明存在了连续的"xxx"
,需要删除,删除后i
和j
都要向后移动。 - 否则说明当前区间已经不存在连续的
"xxx"
,跳出循环。
- 满足
- 用
res
记录删去的'x'
的数量。
代码:
代码语言:javascript复制#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;
}