字串 最長回文子串

2021-06-29 16:41:29 字數 809 閱讀 3735

最長回文子串

回文子串:即正著看和倒著看相同的子串,如:abcba、yyxyy。

由於此類題目為面試筆試常考題目,所以現在就來整理一下啦。

1、暴力求解法

最直接的想法就是暴力求解,但是我們可以看到下面的**時間複雜度是o(n^3)

string findlongeststring(string str)//暴力求解演算法

} }if(maxlength>0)

return str.substr(start,maxlength);

return "not found!";

}

2、中心擴充套件法

中心擴充套件就是把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來找最長的子回文串。演算法複雜度為o(n^2)。

這裡分字串的長度為奇數偶數進行討論。

string findlongeststringsecond(string str)//中心擴充套件法

j--;

k++;

} }for(i=0;i=0&&kmaxlength)

j--;

k++;

} }if(maxlength>0)

return str.substr(start,maxlength);

return "not found!";

}

3、manacher法

字串 最長回文子串

介紹一下幾個概念 就是從左往右和從右往左讀是一樣的。就如標語 我為人人,人人為我 子串,顧名思義,就是在原字串中的子集,就叫子串。串就是不能分割的,就是連在一起,這個要區別與子串行,子串行就是一段 一段的。列舉各個起點和終點,然後進行判斷該子串是否為回文,最後就是更新最長的回文串。列舉起點和終點 o...

字串 最長回文子串

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。示例 1 輸入 babad 輸出 bab 注意 aba 也是乙個有效答案。示例 2 輸入 cbbd 輸出 bb 思路 用manacher class solution int max 1 int res 0 儲存最...

字串處理 最長回文子串

題目描述 給定乙個字串,求它的最長回文子串的長度.方法一 中心擴充套件法.由於回文串中,以某個字元為中心的字首和字尾一定是相同字元。可以利用此方法列舉中心位置,然後進行擴充套件,從而找到最長回文子串。include include using namepace std int longestpali...