美文网首页leetcode
最长回文子串

最长回文子串

作者: momo1023 | 来源:发表于2018-09-06 22:19 被阅读12次

    最长回文子串

    给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。

    输入: "babad"
    输出: "bab"
    注意: "aba"也是一个有效答案。
    
    输入: "cbbd"
    输出: "bb"
    
    class Solution:
        def longestPalindrome(self, s):
            """
            :type s: str
            :rtype: str
            """
            if not s or len(s)==1:
                return s
    
            result = ''
            maxlen = 0
            for i in range(len(s)):
                for x in range(maxlen,len(s) - i):
                    tsr = s[i:i+x+1]
                    rtsr = tsr[::-1]
                    if tsr == rtsr and len(tsr) > maxlen:
                        maxlen = len(tsr)
                        result = tsr
    
            return result
    
    # manacher算法
    def manacher(self):
            s = '#' + '#'.join(self.string) + '#'               # 字符串处理,用特殊字符隔离字符串,方便处理偶数子串
            lens = len(s)
            f = []                                          # 辅助列表:f[i]表示i作中心的最长回文子串的长度
            maxj = 0                                        # 记录对i右边影响最大的字符位置j
            maxl = 0                                        # 记录j影响范围的右边界
            maxd = 0                                        # 记录最长的回文子串长度
            for i in range(lens):                           # 遍历字符串
                if maxl > i:
                    count = min(maxl-i, int(f[2*maxj-i]/2)+1)  # 这里为了方便后续计算使用count,其表示当前字符到其影响范围的右边界的距离
                else :
                    count = 1
                while i-count >= 0 and i+count < lens and s[i-count] == s[i+count]:  # 两边扩展
                    count += 1
                if(i-1+count) > maxl:                         # 更新影响范围最大的字符j及其右边界
                    maxl, maxj = i-1+count, i
                f.append(count*2-1)
                maxd = max(maxd, f[i])                       # 更新回文子串最长长度
            return int((maxd+1)/2)-1                        # 去除特殊字符
    

    相关文章

      网友评论

        本文标题:最长回文子串

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