//KMP,对vector单个赋值不懂,只能用c语言形式拉 //大致题意:字符串s有多少个子串既是前缀又是后缀 #include <iostream> #include <string> #include <cstring> #include <cstdlib> using namespace std; const int N = 400010; int next[N] = {0},a[N] = {0}; void get_next(string s) { int i,j; i=0; j=-1; next[0]=-1; while(i<s.length()) { if(j==-1||s[i]==s[j]) { ++i; ++j; next[i]=j; } else j=next[j]; } } int main() { int i,j,k,T; string s; while(cin>>s) { get_next(s); k = s.length(); j =0; while(k>0) { a[j++] = next[k]; k = next[k]; } for(i=j-2;i>=0;i--)//a[j-1]等于0 cout<<a[i]<<" "; cout<<s.length()<<endl; memset(a,0,sizeof(a)); memset(next,0,sizeof(next)); s.clear(); } // system("pause"); return 0; }