最長回文子串

2021-10-08 22:34:50 字數 954 閱讀 7127

解法 1:暴力法

菜雞的我第一想法只能想到暴力法,遍歷各種可能結果。

class solution

temp="";

}return res;}};

該辦法效率太低,所以力扣測試用例只能通過46個,後續的會超出時間限制

解法 2:

將字串 s 反轉得到字串 rev,再求他們的最長公共子串,再判斷該最長公共子串是否就是我們要找的最長回文子串。

class solution

}else break;

}temp="";

}return res;}};

注:該方法雖然比暴力法高效,但是在查詢最長公共子串的部分效率還是不夠高,所以在力扣中最後乙個測試用例會超出時間限制。

解法 3:動態規劃

初始狀態:

dp[i][i]=1; //單個字元是回文串

dp[i][i+1]=1 if s[i]=s[i+1]; //連續兩個相同字元是回文串

實現**:

class solution

}return s.substr(start,mlen);

//該函式的意思是獲取從start開始長度為mlen長度的字串

}private:

int expendaroundcenter(string s,int left,int right)

//計算以left和right為中心的回文串長度

{int l=left;

int r=right;

while(l>=0 && r解法 5:manacher

這是乙個專門用作處理最長回文子串的方法,思想很巧妙,比較難以理解,這裡直接借用了別人的講解方法。其實主要思想是,把給定的字串的每乙個字母當做中心,向兩邊擴充套件,這樣來找最長的子回文串,這個叫中心擴充套件法,但是這個方法還要考慮到處理 abba 這種偶數個字元的回文串。manacher 法將所有的字串全部變成奇數個字元。

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

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