LeetCode Python - 5.最长回文子串

文章目录

  • 题目
  • 答案
  • 运行结果


题目

给你一个字符串 s,找到 s 中最长的回文子串。

如果字符串的反序与原始字符串相同,则该字符串称为回文字符串。

示例 1:

输入:s = “babad”
输出:“bab”
解释:“aba” 同样是符合题意的答案。

示例 2:

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

提示:

  • 1 <= s.length <= 1000
  • s 仅由数字和英文字母组成

答案

class Solution(object):
    def longestPalindrome(self, s):
        if (len(s) < 2):
            return s
        start = 0  #记录最长回文子串开始的位置
        maxLen = 0 #记录最长回文子串的长度
        for i in range(len(s) - 1):
            for j in range(i,len(s)):#j从i开始,不从i+1开始,s=‘ac’就能选第一个‘a’
                # 法一:截取所有子串,然后在逐个判断是否是回文的
                # 法二(优化):截取所有子串,如果截取的子串小于等于之前遍历过的最大回文串,直接跳过。
                          # 因为截取的子串即使是回文串也不可能是最大的,所以不需要判断
                if (j - i < maxLen):
                    continue
                if self.isPalindrome(s, i, j) and  (maxLen < j - i + 1):
                # maxLen为最大长度时,后面maxLen
                    start = i
                    maxLen = j - i + 1
        return s[start:start + maxLen]
 
    # 判断是否是回文串
    def isPalindrome(self,s,start,end):
        while (start < end) :
            if s[start] != s[end]:
                 return False
            start += 1
            end -= 1
        return True
 
s =   "ac"
S = Solution()
result = S.longestPalindrome(s)
print(result)

运行结果

LeetCode Python - 5.最长回文子串_第1张图片
LeetCode Python - 5.最长回文子串_第2张图片

你可能感兴趣的:(LeetCode题库,python,leetcode,算法)