rt,下面这段代码很轻松就 AC 了,但萌新感觉复杂度是 O(n2) 的,是 €€£ 数据太水还是我复杂度算错了?
#include<bits/stdc++.h>
#define N 2000005
using namespace std;
int n,jump[N],dp[N],t[150];char c[N];
long long ans;
int main(){
cin>>n>>(c+1);
for(int i=1;i<=n;i++){
if(t[c[i]]){
int j=i-1;
while(c[j]!=c[i]&&j>0)j=jump[j]-1;
if(j>0)jump[i]=j,dp[i]=dp[j-1]+1;
ans+=dp[i];
}else t[c[i]]=1;
}cout<<ans;return 0;
}
大概思路就是跳过可消除的子串跳过来统计答案。