美文网首页
5.最长回文子串(方法2)

5.最长回文子串(方法2)

作者: 王王韦王奇 | 来源:发表于2019-04-21 22:26 被阅读0次
# 给定一个字符串 s,找到 s 中最长的回文子串。你可以假设 s 的最大长度为1000。
# 回文字段:正着读和倒着读都相同的文字,如abcba,abccba
# 示例 1:
# 输入: "babad"
# 输出: "bab"
# 注意: "aba"也是一个有效答案。

# 难度:中等


class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        a = 1
        if s != '':
            b = s[0]
            if len(s) > 1 and s[1] == s[0] and a < 2:
                a = 2
                b = s[0: 2]
        else:
            b = ''
        for i in range(1, len(s) - 1):
            for j in range(1, i + 1):
                if i - j >= 0 and i + j < len(s):
                    if s[i - j] != s[i + j]:
                        break
                    elif len(s[i - j: i + j + 1]) > a:
                        a = len(s[i - j: i + j + 1])
                        b = s[i - j: i + j + 1]
                else:
                    break
            if s[i] == s[i + 1]:
                if len(s[i: i + 2]) > a:
                    a = len(s[i: i + 2])
                    b = s[i: i + 2]
                for k in range(1, i + 1):
                    if i - k >= 0 and i + k + 1 < len(s):
                        if s[i - k] == s[i + k + 1]:
                            if len(s[i - k: i + k + 2]) > a:
                                a = len(s[i - k: i + k + 2])
                                b = s[i - k: i + k + 2]
                        else:
                            break
                    else:
                        if a < 2:
                            a = 2
                            b = s[i: i + 2]
                        break
        if len(s) == 2:
            if s[0] == s[1]:
                b = s
        return b


print(Solution.longestPalindrome(0, "cbbd"))

相关文章

网友评论

      本文标题:5.最长回文子串(方法2)

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