問題描述:給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為 1000。
注釋:回文通俗的說就是正著念和反著念都一樣,如:上海自來水來自海上。
示例 1:
輸入: ""dabccbac""
輸出: "abccba"
示例 2:
輸入: "cbbd"
輸出: "bb"
解題思路:
此處撰寫解題思路
遍歷每乙個索引,以這個索引為中心,利用「回文串」中心對稱的特點,往兩邊對稱的特點,往兩邊擴散,記錄最長能擴散的長度。
注意:回文串在長度為奇數和偶數的時候,「回文中心」的形式是不一樣的。
奇數回文串的中心是乙個具體的字元,例如:回文串 aba 的中心是字元 b ;
偶數回文串的中心是位於中間兩個字元的空隙,例如:回文串 abba 的中心是兩個 b 中間的那個空隙。
我們可以設計乙個方法,相容以上兩種情況:
1、如果傳入重合的索引編碼,進行中心擴散,此時得到的回文子串的長度是奇數;
2、如果傳入相鄰的索引編碼,進行中心擴散,此時得到的回文子串的長度是偶數。
**:
class solution {
public string longestpalindrome(string s) {
if(s == null || s.length()<1){
return "";
int start = 0, end = 0;
// 遍歷整個字串,將每個字元都從中心開始拓展
for(int i=0;i// 因為回文可能有兩種情況,奇數回文和偶數回文
// 奇數回文,最小的長度肯定是1,就是它自己,中心就是i
int len1 = expandaroundcenter(s,i,i);
// 偶數回文,最小長度可能位0,中心介於i和i+1之間
int len2 = expandaroundcenter(s,i,i+1);
// 比較奇數回文和偶數回文的長度,選擇最長的
int len = math.max(len1,len2);
// 如果長度比原來的長度長了,要記錄回文的下標
求解最長的回文子串
1.暴力法 找出所有子串,並且判斷是否是回文子串,並且記錄最長長度,演算法複雜度為o n 3 強烈不推薦。2.對稱求解法 遍歷字串每個位置,從每個位置向兩邊擴散,判斷是否對稱,演算法複雜度為o n 2 但是需要考慮長度為奇偶兩種情況。示例 public int longestpalindrome s...
最長回文子串 最長回文子串行
1.最長回文子串行 可以不連續 include include include include using namespace std 遞迴方法,求解最長回文子串行 intlps char str,int i,int j intmain include include include using n...
演算法 最長回文子串
題目描述 對於乙個字串,請設計乙個高效演算法,計算其中最長回文子串的長度。給定字串a以及它的長度n,請返回最長回文子串的長度。例如 輸入 abc1234321ab 12 返回值 7 最長回文子串 public static intgetlongestpalindrome string a,int n...