问题描述:
给你一个字符串 s
,找到 s
中最长的回文子串。
问题示例
示例 1:
输入:s = "babad"
输出:"bab"
解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd"
输出:"bb"
提示:
1 <= s.length <= 1000
s 仅由数字和英文字母组成
解题思路:
暴力枚举,通过列举每一个子串,并且判断子串是否为回文串,每次更新最大的回文子串和长度
- 首先实现判断是否为回文串的函数,在python语法中,使用切片方法[::-1]即可将字符串倒置,如果倒置后的字符串和原来的相同,则表示为回文串
- 两层循环嵌套去枚举每一个子串,判断是否为回文串,判断是否大于当前最大回文串长度,检查是否更新最大回文串
这里需要注意:可以先判断子串长度是否大于当前最大回文串长度,如果不大于就没有判断的必要了,并且在枚举时,内层的下标不需要从i+1开始,直接使用i+maxisze,因为长度不大于maxsize的字符串没有必要进行枚举,这样就能降低时间的损耗,最后勉强AC了
解决方案:
提示:这里使用python语言解题,其他语言逻辑都一样
class Solution:
def isPalindromic1(self,substr: str) -> bool:
tmpstr = substr[::-1]
if substr == tmpstr:
return True
return False
def longestPalindrome(self,s: str) -> str:
maxsize = 0
max_backstr = ""
for i in range(len(s)):
for j in range(i+maxsize, len(s)+1):
substr = s[i:j]
if substr.__len__()>maxsize and self.isPalindromic1(substr):
max_backstr = substr
maxsize = substr.__len__()
return max_backstr