尋找最長回文字串

2021-10-05 23:23:02 字數 1480 閱讀 1446

回文字串是將字串逆序後和原字串一樣的字串,就是正著讀和反著讀都一樣的字串。

給定乙個字串,尋找它的回文字串,我的實現思路是使用回溯法,具體如下:首先選定乙個點,使用兩個變數left和right分別指向該點的左右兩側,如果left和right指向的字串相等,那麼left向左移動一位,right向右移動一位,繼續判斷,直到left和right不相等,此時left和right所組成的字串就是回文字串,判斷回文字串長度,如果大於result,就更換result的值,否則不更換。按照這個想法,迴圈迭代每乙個點。

注意事項:上述方法中,當我們選定乙個點以後,預設就以這個點為回文字串的中心,但是如果這個回文字串字元個數為偶數個,例如"bcaacd"字串,上述方法則不可行,此時我們應選定兩個緊鄰的字元為中心。

def

longspairs

(s):

length =

len(s)

result =

str(

)# 記錄最終結果字串

if length ==

1or length ==0:

return s

for pos in

range(0

, length -1)

:# 開始迭代每乙個點

start = pos # start指向pos左方向

end = pos # end指向pos右方向

while s[start]

== s[end]

: start -=

1 end +=

1if start <

0or end >= length:

# 越界則退出迴圈

break

iflen

(result)

< end - start -1:

# 如果此時回文字串長度大於result的長度,則更新result的值

start +=

1 result = s[start:end]

start = pos -

1 end = pos +

1if s[end]

== s[pos]

:# 解決「注意事項」中的問題,如果此時end和pos指向的字元相等,那麼該回文字串長度為偶數

end +=

1while start >-1

and end < length and s[start]

== s[end]

: start -=

1 end +=1if

len(result)

< end - start -1:

start +=

1 result = s[start:end]

return result

最長回文字串

scanf s 輸入字串碰到空格或者tab就會停下來。此處可以使用fgets或者gets 另外注意標頭檔案cctype中的函式的巧妙使用,此處使用isalpha和toupper簡化了 此處列舉字串的中間位置,然後向倆邊擴充套件,節省了時間複雜度,注意向倆邊擴充套件時,奇數個和偶數個長度的區別。另外程...

最長回文字串

回文串定義 回文串 是乙個正讀和反讀都一樣的字串,比如 asddsa 或者 lovekevol 等等就是回文串。回文子串,顧名思義,即字串中滿足回文性質的子串。這裡我給出通過 列舉回文串的中間位置i,然後不斷向外擴充套件,直達有字元不相同。注意,這裡長度為奇數和偶數的處理方式是不一樣的。下面給出 這...

最長回文字串

時間限制 1000 ms 記憶體限制 65535 kb 難度 4 描述 輸入乙個字串,求出其中最長的回文子串。子串的含義是 在原串連續出現的字串片段。回文的含義是 正著看和倒著看是相同的,如abba和abbebba。在判斷是要求忽略所有的標點和空格,且忽略大小寫,但輸出時按原樣輸出 首尾不要輸出多餘...