最長回文子串

2021-07-04 02:34:19 字數 1287 閱讀 4719

思路:

分兩種情況考慮:

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