#include #include#include
using
namespace
std;
string manacher(string
s)
//初始化變數
vector p(t.size(), 0
);
int mx = 0, id = 0, reslen = 0, rescenter = 0
;
//迴圈t.size()-1次
for (int i = 1; i < t.size(); ++i)
//mx:當前已經處理的回文子串所達最靠後的終點
//id:終點最靠後的回文子串的中心字元下標
if (mx < i +p[i])
//結果
//回文字串最大長度reslen
//回文字串的中心位置rescenter
if (reslen }
//例子: "noon",中間的 '#' 在字串 "$#n#o#o#n#" 中的位置是5,半徑也是5,
//字串的長度(半徑減一):4,起始位置(中間位置減去半徑再除以2):0
//結論:最長子串的長度是半徑reslen減1,起始位置是中間位置rescenter減去半徑reslen再除以2。
return s.substr((rescenter - reslen) / 2, reslen - 1);}
//主程式
intmain()
參考:
求取字串最長的回文子串
題目 給定乙個字串s,找到s中最長的回文子串。你可以假設s的最大長度為 1000。思路 1.暴力解法 對每個字元而言,將其作為子串的第乙個字元,然後從字串的後面開始遍歷,找到可以使當前起始字元為頭的回文串,對字串所有字元都進行上述的操作,即可求取最長的回文子串,但是這樣時間複雜度很高 2.動態規劃的...
字串 最長回文子串
最長回文子串 回文子串 即正著看和倒著看相同的子串,如 abcba yyxyy。由於此類題目為面試筆試常考題目,所以現在就來整理一下啦。1 暴力求解法 最直接的想法就是暴力求解,但是我們可以看到下面的 時間複雜度是o n 3 string findlongeststring string str 暴...
字串 最長回文子串
介紹一下幾個概念 就是從左往右和從右往左讀是一樣的。就如標語 我為人人,人人為我 子串,顧名思義,就是在原字串中的子集,就叫子串。串就是不能分割的,就是連在一起,這個要區別與子串行,子串行就是一段 一段的。列舉各個起點和終點,然後進行判斷該子串是否為回文,最後就是更新最長的回文串。列舉起點和終點 o...