KMP算法应用--最短回文串
给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。
示例 1:
输入: "aacecaaa"
输出: "aaacecaaa"
示例 2:
输入: "abcd"
输出: "dcbabcd"
算法:KMP
class Solution { public: string shortestPalindrome(string s) { if(!s.size())return ""; string t(s.rbegin(),s.rend()); int n=s.size(); vector<int>nx(n); nx[0]=-1; int j=-1; for(int i=1;i<s.size();i++){ while(j>-1&&s[i]!=s[j+1])j=nx[j]; if(s[i]==s[j+1])j++; nx[i]=j; } j=-1; for(int i=0;i<n;i++){ while(j>-1&&t[i]!=s[j+1])j=nx[j]; if(t[i]==s[j+1])j++; } return t+s.substr(j+1,n-j+1); } };