题解:P12143 [蓝桥杯 2025 省 A] 好串的数目
后缀处理 + 字符串模拟
简单题,维护
显然
同时,若记
于是得出结论,对于位置
一些细节可见下方代码。
#define rep(x,y,z) for(int x=y;x<=z;x++)
#define per(x,y,z) for(int x=y;x>=z;x--)
const int N=1e5+5;
int stk[N],top;
int ne[N];
void solve(){
string s;
cin>>s;
int n=s.size();
s=" "+s;
ne[n]=n;
per(i,n-1,1){
if(s[i]==s[i+1] || s[i]+1==s[i+1]) ne[i]=ne[i+1];
else ne[i]=i;
}
LL ans=0;
rep(i,1,n){
int p=ne[i];
if(p!=n) p=ne[p+1];
int cnt=p-i+1;
if(cnt>=0) ans+=cnt;
}
cout<<ans;
}