思路:
分兩種情況考慮:
第一種:奇數回文,比如:「aba」
第二種:偶樹回文 ,比如:「adda」
然後遍歷字串,以該字元為中心,檢查它的前後能夠構成上述兩種情況中的
回文串。
時間複雜度: o(n ^2)
**:
public class solution
if(count > maxlen)
//檢查完奇數後,立馬檢查是否滿足偶數 其實如果滿足的話,一定該回文串所有字元相等
// 偶數回文
count = 0;
low = i - 1;
high = i;
while(low >= 0 && high < len && s.charat(low) == s.charat(high))
if(count > maxlen)
}return ps;
}}
動態規劃求解:
思路:對於字串"axa" , 如果子串x為回文串,那麼axa就是回文串
x不是回文串,那麼"axa"也一定不是回文串
所以,可以用乙個狀態轉移方程,來存放子串是否為回文;
matrix[i][j]的意思就是 字串中i到j是否為回文串
注意這裡 i >= j的,也就是說,最後的結果矩陣只有一半。
狀態轉移方程:
matrix[i][j] = 1 // i = j
matrix[i][j] = s[i] == s[j] // i = j - 1 i j 相鄰 只要兩者相等即可
matrix[i][j] = s[i]==s[j] && matrix[i + 1][ j - 1] // 其他情況
觀察這個遞迴式,可知,matrix[i][j] 要利用到matrix[i + 1][j - 1]
所以,這次不能一行一行的求出值,而應當一列一列的求值。
**:
public static string longestpalindrome(string s)
for(int col = 1 ; col < len ; col++)
matrix[row][col] = true;
int length = col - row + 1;
if(length > maxlen)
} }}
return s.substring(start,start+maxlen);
}
最長回文子串 最長回文子串行
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,且佔據單獨一行,輸出最長的回文子串 如有多個,輸出,起始位置最...