最長回文子串

2022-03-04 15:35:59 字數 963 閱讀 6239

給定乙個字串 s,找到 s 中最長的回文子串。你可以假設 s 的最大長度為1000。

示例 1:

輸入: "babad"

輸出: "bab"

注意: "aba"也是乙個有效答案。

示例 2:

輸入: "cbbd"

輸出: "bb"

自己的思路:求乙個字串的最長回文子串,我們可以將以每個字元為首的子串都遍歷一遍,判斷是否為回文,如果是回文,再判斷最大長度的回文子串。演算法簡單,但是演算法複雜度太高,o(n^3)

string longestpalindrome(string s)

}return s.substr(start,maxlength);//利用string中的substr函式來返回相應的子串,第乙個引數是起始位置,第二個引數是字元個數

}

很明顯上述的演算法複雜度太高,應該有更加快捷的做法來處理。下面介紹兩種方法

(1)dp

對於字串str,假設dp[i,j]=1表示str[i...j]是回文子串,那個必定存在dp[i+1,j-1]=1。這樣最長回文子串就能分解成一系列子問題,可以利用動態規劃求解了。首先構造狀態轉移方程

上面的狀態轉移方程表示,當str[i]=str[j]時,如果str[i+1...j-1]是回文串,則str[i...j]也是回文串;如果str[i+1...j-1]不是回文串,則str[i...j]不是回文串。

初始狀態

上式的意義是單個字元,兩個相同字元都是回文串。

string longestpalindrome(string s)

if (rd[i] - 1 > maxlen)

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