題目描述
給定一個僅包含小寫字母的字符串,求它的最長回文子串的長度。所謂回文串,指左右對稱的字符串。
解題思路
當字符串不為空時,回文子串最少也是一個字符,即初始長度為1,當回文子串更長時,就可能有兩種情況:例如“...aa...”或“...aba...”,即長度+1或+2。以后遍歷時每增加一個字符,且該字符也包含在回文子串中時,就可以使用之前得到的最長的長度作為初始長度,按照+1或+2的邏輯進行判斷了。
解題代碼
s = 'abcba'
if len(s) == 1:
print(1)
elif s == s[::-1]:
print(len(s))
else:
# 初始長度為1
max_len = 1
# 從第二個字符開始判斷
for i in range(1, len(s)):
# 長度+2的邏輯
if i - max_len - 1 >= 0 and s[i - max_len - 1:i + 1] == s[i - max_len - 1:i + 1][::-1]:
max_len += 2
# 長度+1的邏輯
elif i - max_len >= 0 and s[i - max_len:i + 1] == s[i - max_len:i + 1][::-1]:
max_len += 1
print(max_len)
總結
關於回文的題目在各種試題中也常常見,當然也比較簡單,但是一般的解法通常會含有兩個循環,相對於上面的算法只用了一個循環,顯然上面的算法更好。
題目及解題算法來自:最長回文子串