请问如下代码这种跳 lst 的做法为啥是 O(n∣Σ∣)O(n|\Sigma|)O(n∣Σ∣)?实在想不明白了。
for(int i=1;i<=n;i++) { for(int j=i-1;j>0;j=lst[j]-1) { if(s[i]==s[j]) { lst[i]=j;break; } } if(lst[i])dp[i]=dp[lst[i]-1]+1,ans+=dp[i]; } cout<<ans<<'\n';