本文最后更新于 727 天前,其中的信息可能已经有所发展或是发生改变。
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'
的数量。
代码:
| #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'){ |
| if(i - j == 2) res ++, j ++; |
| i ++; |
| } |
| } |
| } |
| cout << res << endl; |
| } |
| |
| int main(){ |
| solve(); |
| return 0; |
| } |