1勒虾、題目
給你一個字符串 s,找到 s 中最長的回文子串瘸彤。
如果字符串的反序與原始字符串相同修然,則該字符串稱為回文字符串。
示例1:
輸入:s = "babad"
輸出:"bab"
解釋:"aba" 同樣是符合題意的答案质况。
2愕宋、代碼
class Solution(object):
def longestPalindrome(self,s):
"""
中心擴散法:以當前字符向兩端擴散,找到最長子串结榄。
對于給定的字符串中贝,遍歷字符串中的每一個字符或每兩個字符之間的空隙,將其作為回文子串的中心臼朗。
對于每個可能的中心位置邻寿,從該位置向兩側(cè)擴展蝎土,直到不滿足回文條件為止。這一過程需要維護兩個指針老厌,一個指向當前中心字符的左側(cè)瘟则,另一個指向當前中心字符的右側(cè)。
在擴展的過程中枝秤,不斷更新當前回文子串的起始和結(jié)束索引,以及當前回文子串的長度慷嗜。
遍歷所有可能的中心位置淀弹,記錄最長的回文子串的起始和結(jié)束索引,即可得到最長回文子串庆械。
"""
if len(s) == 0:
return ""
sub_str = s[0]
def aroundCenter(in_s, left, right):
"""
從給定的左右索引開始薇溃,向兩側(cè)擴展,直到不滿足回文條件為止
返回最長回文子串的起始和結(jié)束索引
"""
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)):
# 以當前字符作為中心向兩側(cè)擴展
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)