原題連結
題解
KMP演算法的應用。
我們知道KMP演算法中NEXT陣列是當前位置除外的最大前字尾長度。
直接丟擲結論:ans=cnt-Next[n]
證明過程
code
#include<bits/stdc++.h> using namespace std; const int N=1e6+5; int Next[N]; string s; void NEXT(){ int cnt=s.size(); if (cnt==1){ Next[0]=-1; return; } Next[0]=-1; Next[1]=0; int i=1,cn=0; while (i<cnt){ if (s[i]==s[cn]) Next[++i]=++cn; else if (cn!=0) cn=Next[cn]; else Next[++i]=cn; } } int main(){ int l; cin>>l; cin>>s; int cnt=s.size(); NEXT(); cout<<cnt-Next[cnt]<<endl; return 0; }