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);
    }
};

 

posted @ 2019-08-06 15:31  YF-1994  阅读(534)  评论(0编辑  收藏  举报