面試之 求最長回文子串長度

2021-10-06 22:40:10 字數 1036 閱讀 8129

最近太忙,好幾天沒鞏固基礎了。今天,求乙個字串你的最長回文子串。

思路:回文字串就是說該字串從前往後和從後往前的內容是一樣的。

所以,可以用指標指向陣列的某一元素,從該元素向後和向前遍歷,如果一樣則說明該子串是回文子串。

比如"abcdefe"中「efe」就是乙個回文字串。

當然「abba」中"abba"就是乙個回文字串。

所以說,回文字串可以是單數,也可以是雙數。

#include

intgethuiwensubstr

(char

* str,

int length)

int maxlen =0;

//存放最終結果:回文子串的長度

int cursubstrlen =0;

//存放當前指標遍歷的過程中回文子串的長度

//遍歷整個字串

for(

int i =

0; i < length; i++

)else

//如果i兩邊的元素相同,則根據j的大小可求出子串的長度。}if

(cursubstrlen > maxlen)

//子串為奇數個時,求出該字串的最大回文子串

//當指標指向下標為i的元素時,定義q從0開始以i和i+1為中心向兩邊遍歷子串;注意判斷條件,下標要介於0~length-1之間。

//注:此迴圈判斷條件是當子串長度為奇數時,如「abcdeffe」

for(

int q =0;

((i-q)

>=0)

&&(i+q+

1; q++

)else

//else第一次是當i指向f的時候,q為0,cursubstrlen為2; q為1時,cursubstrlen為4}if

(cursubstrlen > maxlen)

}return maxlen;

//返回維護的最大長度值

}int

main()

這些小演算法還是要多看多思考多寫。

python實現求最長回文子串長度

給定乙個字串,求它最長的回文子串長度,例如輸入字串 35534321 它的最長回文子串是 3553 所以返回4。最容易想到的辦法是列舉出所有的子串,然後一一判斷是否為回文串,返回最長的回文子串長度。不用我說,列舉實現的耗時是我們無法忍受的。那麼有沒有高效查詢回文子串的方法呢?答案當然是肯定的,那就是...

求最長回文子串

求最長回文子串,大概有以下幾種方法 1 錯誤!先翻轉再求最長公共子串 例如 abcdafdcba abcd x 即原串中包含翻轉串的子串時 2 暴力 遍歷每個字串,然後判斷是否是回文子串並記錄最長資訊 時間複雜度o n 3 3 動態規劃 時間複雜度o n 2 空間複雜度o n 2 dp i j 表示...

求最長回文子串

1.第一種方法 o n 2 動態規劃,用s i j 表示從i到j是最長回文字串,用乙個table i j 記錄字串從i到j是否為回文,這樣的話,從底部向上,table i i true 另外如果s i s i 1 則table i i 1 true,然後長度從3開始,如果s i 1 s j 1 則就...