0
点赞
收藏
分享

微信扫一扫

Leetcode 214. 最短回文串(DAY 241)---- 后端面试题

回溯 2022-02-12 阅读 93

文章目录


原题题目


在这里插入图片描述


代码实现(首刷小部分看解 复习了一遍KMP 较为困难)


class Solution {
public:
    void getnext(vector<int>& next,string& str)
    {
        int nextpos = 1,pos = 0,size = str.size();
        while(nextpos < size)
        {
            while(pos && str[nextpos] != str[pos])  pos = next[pos - 1];

            bool equal = (str[nextpos] == str[pos]);
            pos = pos + equal;
            next[nextpos] = pos; 

            ++nextpos;
        }
        next[0] = 1;
    }

    string shortestPalindrome(string s) {
        if(s.empty())   return {};

        string str = s;
        str += "#";
        str += s;
        reverse(str.begin() + s.size() + 1,str.end());

        int size = str.size();
        vector<int> next(str.size(),0);
        getnext(next,str);

        int save = next[size-1];

        string ret = s.substr(save);
        reverse(ret.begin(),ret.end());
        ret += s;
        return ret;
    }
};
举报

相关推荐

0 条评论