最長回文子串

2021-07-22 01:22:01 字數 861 閱讀 3899

題目描述

給定乙個字串,求它的最長回文子串的長度。

分析與解法

最容易想到的辦法是列舉所有的子串,分別判斷其是否為回文。這個思路初看起來是正確的,但卻做了很多無用功,如果乙個長的子串包含另乙個短一些的子串,那麼對子串的回文判斷其實是不需要的。為此,我們可以列舉中心位置,然後再在該位置上用擴充套件法,記錄並更新得到的最長回文長度。參考**如下:

#-*-encoding:utf-8-*-

deflongestpalindrome

(s):

maxp=0

c=0if s is

none:

maxp=0

for i in range(len(s)):

j=0while i-j>=0

and i+j#如果是奇回文

ifnot s[i-j]==s[i+j]:

break

c=2*j+1

j=j+1

if c>maxp:

maxp=c

while i-j>=0

and i+j+1

#如果是偶回文

ifnot s[i-j]==s[i+j+1]:

break

c=2*j+2

j=j+1

if c>maxp:

maxp=c

print maxp

return maxp

longestpalindrome('1234321')

需要注意的點有對於最大值變數命名時避免使用max,因為max是python的build-in function。此題還有一種方法是利用manacher演算法,可以獲得o(n)的複雜度。具體演算法可以參考:

最長回文子串 最長回文子串行

1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...

最長回文子串

描述 輸入乙個字串,求出其中最長的回文子串。子串的含義是 在原串連續出現的字串片段。回文的含義是 正著看和倒著看是相同的,如abba和abbebba。在判斷是要求忽略所有的標點和空格,且忽略大小寫,但輸出時按原樣輸出 首尾不要輸出多餘的字串 輸入字串長度大於等於1小於等於5000,且單獨佔一行 如果...

最長回文子串

輸入乙個字元,求出其中最長的回文子串。子串的含義是 在元串中連續出現的字串片段。回文的含義是 正看和倒看相同,如abba和yyxyy,在判斷時候應該忽略所有的空格和標點符號,且忽略大小寫,但輸出應該保持原樣,輸入的字元長度不超過5000,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...