美文网首页
每日一题-leetcode 最短回文串

每日一题-leetcode 最短回文串

作者: 程序员小2 | 来源:发表于2022-05-19 09:32 被阅读0次

    插: 前些天发现了一个巨牛的人工智能学习网站,通俗易懂,风趣幽默,忍不住分享一下给大家。点击跳转到网站。
    坚持不懈,越努力越幸运,大家一起学习鸭~~~

    给定一个字符串 s,你可以通过在字符串前面添加字符将其转换为回文串。找到并返回可以用这种方式转换的最短回文串。

    示例 1:

    输入:s = "aacecaaa"
    输出:"aaacecaaa"
    示例 2:

    输入:s = "abcd"
    输出:"dcbabcd"

    提示:

    0 <= s.length <= 5 * 104
    s 仅由小写英文字母组成

    java代码:

    class Solution {
        //字符串哈希
        public String shortestPalindrome(String s) {
            int n = s.length();
            int[] fail = new int[n];
            Arrays.fill(fail, -1);
            for (int i = 1; i < n; ++i) {
                int j = fail[i - 1];
                while (j != -1 && s.charAt(j + 1) != s.charAt(i)) {
                    j = fail[j];
                }
                if (s.charAt(j + 1) == s.charAt(i)) {
                    fail[i] = j + 1;
                }
            }
            int best = -1;
            for (int i = n - 1; i >= 0; --i) {
                while (best != -1 && s.charAt(best + 1) != s.charAt(i)) {
                    best = fail[best];
                }
                if (s.charAt(best + 1) == s.charAt(i)) {
                    ++best;
                }
            }
            String add = (best == n - 1 ? "" : s.substring(best + 1));
            StringBuffer ans = new StringBuffer(add).reverse();
            ans.append(s);
            return ans.toString();
        }
    }
    
    

    相关文章

      网友评论

          本文标题:每日一题-leetcode 最短回文串

          本文链接:https://www.haomeiwen.com/subject/xjttprtx.html