力扣最长回文子串

力扣最长回文子串

要求

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

示例 1:

输入: “babad”
输出: “bab”
注意: “aba” 也是一个有效答案。
示例 2:

输入: “cbbd”
输出: “bb”

思路1

1.将所有可能的的最短循环的遍历去判断是否为回文
2.将是回文的存入字典,然后取出最大的长度的那个字符串

代码片

class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        if len(s)==0:
            return "" 
        if len(s)==1:
            return s[0]
        def huiwen(x):
            return x==x[::-1]
        d=dict()
        # d=[]

        l=len(s)
        for i in range(len(s)):
            for j in range(i+1,len(s)): 
                if huiwen(s[i:j+1]) :
                    d[j+1-i]=s[i:j+1]
                else: d[1]=s[-1]

        max1=0
        for k in d:
            if max1<k:
                max1=k
        return d[max1]

思路2

分奇偶找出最大长度的回文串

代码片

class Solution:
    def longestPalindrome(self, s):
        """
        :type s: str
        :rtype: str
        """
        n = len(s)
        maxl = 0
        start = 0
        for i in range(n):
            if i-maxl-1>=0 and s[i-maxl-1:i+1] == s[i-maxl-1:i+1][::-1]:
                start = i - maxl - 1
                maxl += 2
            if i-maxl >=0 and s[i-maxl:i+1]==s[i-maxl:i+1][::-1]:
                start = i - maxl
                maxl += 1
        return s[start: start + maxl]

猜你喜欢

转载自blog.csdn.net/weixin_41781408/article/details/86617573