1. 程式人生 > 其它 >Python基礎05最長對稱子串

Python基礎05最長對稱子串

技術標籤:Pythonpython演算法

7-4 最長對稱子串 (25分)

題目

對給定的字串,本題要求你輸出最長對稱子串的長度。例如,給定Is PAT&TAP symmetric?,最長對稱子串為s PAT&TAP s,於是你應該輸出11。

  • 輸入格式:
    輸入在一行中給出長度不超過1000的非空字串。

  • 輸出格式:
    在一行中輸出最長對稱子串的長度。

輸入樣例:

Is PAT&TAP symmetric?

輸出樣例:

11

演算法邏輯

  • 知識點
  1. 強制型別轉換

將某一型別轉變成另一種型別
在這裡插入圖片描述
我們能看到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='')