rt,赛时猜了一个贪心,就是直接从第一个往后扫并保存当前字串,如果与上一个字串不相同就ans++
#include <bits/stdc++.h>
using namespace std;
int T, n, cnt, ans, cnt1;
string s, ss, sss;
bool check(string &s1, string &s2, int len2, int len1) {
// int len1=s1.size();
if (len1 != len2)return true;
else if (len1 == len2) {
// cout<<114154<<endl;
for (int i = 0; i < len1; i++) {
// cout<<s1[i]<<" "<<s2[i]<<endl;
if (s1[i] != s2[i])return true;
}
return false;
}
}
int main() {
cin.tie(0)->sync_with_stdio(0);
cout.tie(0);
cin >> T;
while (T--) {
cin >> n;
cin >> s;
// bool flag=0;
//// ss.clear();
//// sss.clear();
cnt = 0;
ans = 0;
cnt1 = 0;
// for(int i=0;i<n-1;i++){
// if(s[i]==s[i+1])flag=1;
// }
// if(!flag){
// cout<<n<<endl;
// continue;
// }
for (int i = 0; i < n; i++) {
sss[cnt++] = s[i];
// cout<<cnt<<" "<<cnt1<<endl<<endl;
// for(int i=0;i<cnt;i++)cout<<sss[i];
// cout<<endl;
// for(int i=0;i<cnt1;i++)cout<<ss[i];
// cout<<endl;
if (check(sss, ss, cnt, cnt1)) {
ans++;
// cout<<cnt<<endl<<endl;
for (int j = 0; j < cnt; j++)ss[j] = sss[j];
// cnt=sss.size();
cnt1 = cnt;
cnt = 0;
}
}
cout << ans << endl;
}
return 0;
}
code: