Python基礎05最長對稱子串
阿新 • • 發佈:2021-01-12
7-4 最長對稱子串 (25分)
題目
對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?,最長對稱子串為s PAT&TAP s,於是你應該輸出11。
-
輸入格式:
輸入在一行中給出長度不超過1000的非空字串。 -
輸出格式:
在一行中輸出最長對稱子串的長度。
輸入樣例:
Is PAT&TAP symmetric?
輸出樣例:
11
演算法邏輯
- 知識點
- 強制型別轉換
將某一型別轉變成另一種型別
我們能看到a的原本型別並沒有變化,只是str(a)的型別變了
- 邏輯
1.定義center,lenth,max。center代表中軸,lenth代表左右範圍,max表示找到的最大對稱字元。
2.首先保證字元的左右存在,然後檢視字元的左和右是否相等
3.若相等,則lenth+1。進行下一次比較,返回第二步
4.若不相等,則比較max和現在字元長度的大小,若max較小,更新max。
5.重置center和lenth
注意:lenth為下一位的長度
用center和lenth表示字元長度
當字元長度為偶數時:
lenth * 2 - 1
當字元長度為奇數時:
lenth * 2 - 1
程式碼塊
ls = list(input())
m = 1
center = 0.5
L = 0.5
while 0<=center+ m//2< len(ls):
if center-L >= 0 and center+L<len(ls) and ls[int(center - L)] == ls[int(center+L)]:
L = L + 1
else:
if(m < int(2 * L)-1):
m = int(2 * L)-1
center = center + 0.5
if 2 * center % 2 == 0:
L = 1
else:
L = 0.5
if(m < int(2 * L)-1):
m = int(2 * L)-1
print(m,end='')