文章目录
- 题目
- 答案
- 运行结果
题目
给你一个字符串 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 sstart = 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):continueif self.isPalindrome(s, i, j) and (maxLen < j - i + 1):# maxLen为最大长度时,后面maxLen<j-i+1 就为False,能保证截取最长回文字符串start = imaxLen = j - i + 1return s[start:start + maxLen]# 判断是否是回文串def isPalindrome(self,s,start,end):while (start < end) :if s[start] != s[end]:return Falsestart += 1end -= 1return Trues = "ac"
S = Solution()
result = S.longestPalindrome(s)
print(result)
运行结果