#include <bits/stdc++.h>
using namespace std;
int n;
typedef long long ll;
const int MAXN=2000005;
char s[MAXN];
ll f[MAXN],ans;
int found[MAXN][26];
inline char getch() {
char ch=getchar();
while(ch<'a'||ch>'z') ch=getchar();
return ch;
}
inline void copyFound(int i,int j) {
for(int k=0;k<26;k++) found[j][k]=found[i][k];
found[j][s[i]-'a']=i;
return ;
}
int main() {
scanf("%d",&n);
for(int i=1;i<=n;i++) {
s[i]=getch();
if(i==1) continue;
if(s[i]==s[i-1]) {
copyFound(i-2,i);
f[i]=f[i-2]+1LL;
ans+=f[i];
}
else if(found[i-1][s[i]-'a']>0) {
copyFound(found[i-1][s[i]-'a']-1,i);
f[i]=f[found[i-1][s[i]-'a']-1]+1LL;
ans+=f[i];
}
}
printf("%lld\n",ans);
return 0;
}
有大佬帮忙看一下哪里 RE 了吗?