如果最长公共前后缀长度为 0,那么 t 只能是两个 s 加在一起,代码实现为 t=s+s。
否则 t 就是 s 加上 s 中下标为最长公共前后缀长度的字符及其之后的所有字符,代码实现为 t=s+s.substr(nex[len-1])。
代码:
#include<bits/stdc++.h> usingnamespace std; #define LL long long #define itn int #define ull unsigned long long string s; int nex[1000005]; intmain(){ cin>>s; int len=s.size(); for(int i=1,j=0;i<len;i++){ while(j>0&&s[i]!=s[j])j=nex[j-1]; if(s[i]==s[j])j++; nex[i]=j; } if(nex[len-1]==0)cout<<s+s; else cout<<s+s.substr(nex[len-1]); return0; }