返回所有的最長回文子串 O n

2021-10-11 15:30:33 字數 848 閱讀 1249

用馬拉車演算法將回文半徑p[i]求出來,回文字串的長度就是p[i]-1,

起始的下標就是(i - p[i]

)/2,遍歷一次p[i]陣列將所有最大長度的

字串存到vector就可以了。

#include

using

namespace std;

string solve

(string s,vector

&v) vector<

int>

p(news.

size()

,0);

//mx(某回文串延伸到的最右邊下標),id(mx所屬回文串中心下標),

//recenter(結果最大回文串中心下標),relen(最大長回文長度)

int id =

0,mx =

0,rlen =

0,rcenter =0;

for(

int i =

1; i < news.

length()

; i++)if

(p[i]

> rlen)

}// for(int i = 0; i < news.length(); i++) cout << p[i] << " " ;

for(

int i =

1; i < news.

length()

; i++)}

return s.

substr

((rcenter - rlen)/2

,rlen -1)

;}intmain()

}

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

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,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...