文章目录
- 题目
- 答案
- 运行结果
题目
给你一个字符串 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<j-i+1 就为False,能保证截取最长回文字符串
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)
运行结果