题目描述
思路分析
回文串问题转化为KMP
问题等价于求最长回文前缀,构造翻转后等价于求KMP的next数组
代码实现
class Solution {
public:
string shortestPalindrome(string s) {
string t(s.rbegin(),s.rend());
int n=s.size();
s=' '+s+'#'+t;
vector<int> ne(n*2+2);
for(int i=2,j=0;i<=n*2+1;i++){
while(j&&s[i]!=s[j+1]) j=ne[j];
if(s[i]==s[j+1]) j++;
ne[i]=j;
}
int len=ne[n*2+1];
string left=s.substr(1,len),right=s.substr(1+len,n-len);
return string(right.rbegin(),right.rend())+left+right;
}
};