c 獲取字串中最長的回文子串

2022-02-01 14:12:49 字數 777 閱讀 2299

#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...