首先,如果要在第 k次变,前面是出x手势,后面出y手势,那么就是k[x]1−x+k[y]x−n。
其实k数组是可以用前缀和完成。
#include<bits/stdc++.h>
using namespace std;
const int N = 1e5 + 10;
int s[N], h[N], p[N];
int n;
int main() {
scanf("%d", &n);
for (int i = 1; i <= n; i++) {
s[i] = s[i - 1], h[i] = h[i - 1], p[i] = p[i - 1];
char st;
cin >> st;
if (st == 'P')p[i]++;
if (st == 'S')s[i]++;
if (st == 'H')h[i]++;
}
int ans=0;
for(int i=1;i<=n;i++){
ans=max(ans,max(p[i],max(s[i],h[i]))+max(p[n]-p[i],max(s[n]-s[i],h[n]-h[i])));
}
printf("%d",ans);
return 0;
}