这个是学习的思路(翻到T2)
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
const int W=30;
int n;
long long ans;
string s;
int p[N];
int g[N][W];
long long f[N];
void init(){
for(int i=1;i<n;i++){
if(s[i]==s[i+1]){
p[i]=i+1;
}
}
for(int i=n-1;i>=1;i--){
if(p[i]!=0||p[i+1]==0||p[i+1]==n){
continue;
}
for(int j=0;j<=25;j++){
if(j!=s[p[i+1]+1]-'a'){
g[i+1][j]=g[p[i+1]+1][j];
}else{
g[i+1][j]=p[i+1]+1;
}
}
p[i]=g[i+1][s[i]-'a'];
}
}
int main(){
ios::sync_with_stdio(false);
cin.tie();
cout.tie();
cin>>n>>s;
s=" "+s;
init();
for(int i=n;i>=1;i--){
if(p[i]){
f[i]=f[p[i]+1]+1;
}
ans+=f[i];
}
cout<<ans;
return 0;
}