一开始我是这样直接按题目意思直接模拟判断的
后面发现差不多只能过一半样例
之后ai了一下,发现可以判断是否字符a,h交替出现,如果是就cnt++,如果不是就重置cnt为1;
#include <bits/stdc++.h>
using namespace std;
int main() {
int N;
string s;
cin >> N >> s; // 先读N再读字符串
long long cnt = 1; // 当前笑声长度
long long ans = 0;
// 先处理单个字符的情况
if (N == 1) {
if (s[0] == 'a' || s[0] == 'h') {
cout << 1;
} else {
cout << 0;
}
return 0;
}
// 遍历查找交替的a和h
for (int i = 1; i < N; i++) {
// 如果当前是a或h,并且和前一个字符交替
if ((s[i] == 'a' && s[i-1] == 'h') || (s[i] == 'h' && s[i-1] == 'a')) {
cnt++;
}
// 如果当前是a或h,但是不交替,重新开始计数
else if (s[i] == 'a' || s[i] == 'h') {
cnt = 1;
}
// 如果不是a或h,重新开始
else {
cnt = 0;
}
ans = max(ans, cnt);
}
// 检查第一个字符
if (s[0] == 'a' || s[0] == 'h') {
ans = max(ans, 1LL);
}
cout << ans;
return 0;
}
