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