leetcode 214. 最短回文串

leetcode 214. 最短回文串_第1张图片

/*
    将字符串反转之后中间加"#"做拼接然后用kmp求next数组
*/
class Solution {
public:
    string shortestPalindrome(string s) {
        string revs = s;//存s的逆序
        int tn = s.size();//中点处,#前面的位置
        reverse(revs.begin(),revs.end());
        s = ' '+ s + '#' + revs;//让下标从1开始
        int n = s.size()-1;//实际长度
        vector ne(n+1);//next数组
        for(int i = 2, j = 0; i <= n; i++){//求next数组 
            while(j&&s[i]!=s[j+1]) j = ne[j];
            if(s[i]==s[j+1]) j++;
            ne[i] = j;
        }
        return s.substr(tn+2,tn-ne[n])+s.substr(1,tn);
    }
};

 

你可能感兴趣的:(Leetcode,复习)