題目描述
給定一個僅包含小寫字母的字串,求它的最長回文子串的長度,所謂回文串,指左右對稱的字串,
解題思路
當字串不為空時,回文子串最少也是一個字符,即初始長度為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)
總結
關于回文的題目在各種試題中也常常見,當然也比較簡單,但是一般的解法通常會含有兩個回圈,相對于上面的演算法只用了一個回圈,顯然上面的演算法更好,
題目及解題演算法來自:最長回文子串
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/234640.html
標籤:Python
