1、題目
給你一個字符串 s,找到 s 中最長的回文子串。
如果字符串的反序與原始字符串相同,則該字符串稱為回文字符串。
示例1:
輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案。
2、代碼
class Solution(object):
def longestPalindrome(self,s):
"""
中心擴散法:以當前字符向兩端擴散,找到最長子串。
對于給定的字符串,遍歷字符串中的每一個字符或每兩個字符之間的空隙,將其作為回文子串的中心。
對于每個可能的中心位置,從該位置向兩側擴展,直到不滿足回文條件為止。這一過程需要維護兩個指針,一個指向當前中心字符的左側,另一個指向當前中心字符的右側。
在擴展的過程中,不斷更新當前回文子串的起始和結束索引,以及當前回文子串的長度。
遍歷所有可能的中心位置,記錄最長的回文子串的起始和結束索引,即可得到最長回文子串。
"""
if len(s) == 0:
return ""
sub_str = s[0]
def aroundCenter(in_s, left, right):
"""
從給定的左右索引開始,向兩側擴展,直到不滿足回文條件為止
返回最長回文子串的起始和結束索引
"""
len_s = len(in_s)
while (left >= 0) and (right < len_s) and (in_s[left] == in_s[right]):
left = left - 1
right = right + 1
return in_s[left + 1:right]
for i in range(0, len(s)):
# 以當前字符作為中心向兩側擴展
sig1_str = aroundCenter(s, i, i)
sig2_str = aroundCenter(s, i, i + 1)
if len(sig1_str) > len(sig2_str):
sig_str = sig1_str
else:
sig_str = sig2_str
if len(sig_str) > len(sub_str):
sub_str = sig_str
return sub_str
3、測試用例
s=Solution()
ts="babad"
res=s.longestPalindrome(ts)
print(res)