关注我,分享高质量每日一题题解~
b站同名账号分享力扣杯历届真题视频题解,也欢迎大家提出宝贵意见!
思路:模拟
- 我们利用 $cnt$ 存储当前连续出现字符 $x$ 的个数。
- 若出现了一个字符 $x$,则 $cnt$ 加一。
- 若出现了一个其它字符,则 $cnt$ 清零。
- 若当前 $cnt = 3$,说明遇到了连续三个 $x$,此时需要删除一次。特别地,此时删除最后一个字符 $x$ 后,可能“补位”的字符仍为 $x$,如输入样例 $3$ 所示。此时不能将 $cnt$ 清零,而应该减一,然后继续遍历。
代码(C++)
#include <bits/stdc++.h>
using namespace std;
int main() {
int n;
string s;
cin >> n >> s;
int ret = 0, cnt = 0;
for(int i = 0; i < n; i++) {
if(s[i] == 'x') {
cnt++;
if(cnt == 3) {
ret++;
cnt--;
}
} else {
cnt = 0;
}
}
cout << ret << endl;
return 0;
}
代码(Python3)
if __name__ == '__main__':
n = int(input())
s = input()
cnt = 0
ret = 0
for i in range(n):
if s[i] == 'x':
cnt += 1
if cnt == 3:
ret += 1
cnt = 2
else:
cnt = 0
print(ret)
很好的思路 我的双指针不够简单