给你一个字符串 s
,找到 s
中最长的回文子串
示例 1:
输入:s = "babad" 输出:"bab" 解释:"aba" 同样是符合题意的答案。
示例 2:
输入:s = "cbbd" 输出:"bb"
def longestPalindrome(self, s: str) -> str:
n = len(s) #获取字符串长度
#定义一个函数,提高复用性
def center(i,j): #中心扩展
while i>=0 and j<len(s) and s[i]==s[j]: #寻找中心点
i-=1 #向左侧扩展
j+=1 #向右侧扩展
return s[i+1:j] #截取扩展后的字符串
res = '' #用于保存最终的字符串
for i in range(n): #假设每个字符都是中心,逐一遍历
text = center(i,i) #中心是一个字符,获取回文字符串
if len(text)>len(res): #取最长的回文字符串
res = text
text = center(i,i+1) #中心是两个字符
if len(text)>len(res): #取最长的回文字符串
res = text
return res #返回值
测试代码
if __name__=='__main__':
s = 'babab' #自定义或者input都可以
print(longestPalindrome(s))
思路:该题的核心是中心扩展,通过扩展至两侧字符不相同则此时这段回文字符串达到最长,但我们所获得的字符串可能像"ashjsjanxamj"这些千奇百怪,甚至得到的回文字符串仅仅只有一个字符。因此,通过遍历,假设每个字符为中心扩展,然后将长度最长的回文字符串保存至res中,最后输出。
明天也继续努力吧!