最近太忙,好幾天沒鞏固基礎了。今天,求乙個字串你的最長回文子串。
思路:回文字串就是說該字串從前往後和從後往前的內容是一樣的。
所以,可以用指標指向陣列的某一元素,從該元素向後和向前遍歷,如果一樣則說明該子串是回文子串。
比如"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 則就...