最長回文子串

2021-09-26 16:00:57 字數 614 閱讀 5952

dabadcmnm最長回文子串為dabad

此題有多種解法,暴力法就是逐個子串來比較,記錄最長子串,複雜度太高。

動態規劃

當子串是回文子串時候,我們只需要看兩遍新添的兩個字元是否相等,若相等則最新串也是最長子串;若不等,則新串不是回文子串。這也是此題的狀態轉移方程。

例如,aba是回文子串,當aba子串兩端新添的兩個字元相等時候,新串dabad也是回文子串。

我們可以用乙個二維陣列dp記錄所有的子串的狀態,dp[i][j]=1,那麼從i到j的子串是回文子串。

狀態轉移方程為:dp[i][j]=dp[i+1][j-1]&&str[i]==str[j]

其中需要注意,當子串長度為1或2時候,上面轉移方程有問題。如長度為2的時候,只需要右邊的str[i]==str[j],若加了判斷dp[i+1][j-1]會產生問題,故需要注意len=1,2的情況。

/*

最長回文序列

abac

aba解法一:動態規劃

解法二:中心擴散法

參考:*/string longestpalindrome(string str)

} }return longestp;

}

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

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