214. 最短回文串(python) hard 暴力解 + O(n) KMP解法

题目

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

输入: "aacecaaa"
输出: "aaacecaaa"

输入: "abcd"
输出: "dcbabcd"

暴力解(思路很简单):

— 字符串右边是齐全的,逐渐去掉末尾的元素,看这个字符串是否对称
— 对称: 反转字符串并和原来比较,相等即对称。
— 找到对称的部分,把前面去除的末尾元素反转后加到原字符串前

巧妙
class Solution:
    def shortestPalindrome(self, s: str) -> str:
        i=len(s)
        while s[:i][::-1]!=s[:i]:
            i-=1
        return s[i:][::-1]+s
暴力解
class Solution:
    def shortestPalindrome(self, s: str) -> str:
        r = s[::-1]
        for i in range(len(s) + 1):
            if s.startswith(r[i:]):
                return r[:i] + s

时间复杂度为:O(n^2)

kmp O(n)解法:

待补充
https://www.zhihu.com/question/21923021/answer/281346746
https://leetcode-cn.com/problems/shortest-palindrome/solution/zui-duan-hui-wen-chuan-by-powcai/

你可能感兴趣的:(leetcode)