1. 程式人生 > 實用技巧 >LeetCode 5 最長迴文子串

LeetCode 5 最長迴文子串

題目描述連結:https://leetcode-cn.com/problems/longest-palindromic-substring/

解題思路:動態規劃問題。

(1)狀態標識dp[i][j]=0標識s[i]到s[j]這個子序列不為迴文子串,dp[i][j]=1標識其為迴文子串

(2)邊界,對於長度為1的子串肯定為迴文子串即dp[i][i]=1,長度為2的子串dp[i][i+1]= (s[i]==s[i+1])

(3)狀態轉移方程,dp[i][j]=(s[i]==s[j]&&dp[i+1][j-1]) 需要注意我們這裡動態規劃的順序應為從子串的長度遞增的順序,即先判斷子串長度為1的,然後判斷長度為2的,一直到整個長度。

最後返回為迴文子串的最長的子串即可。LeetCode程式碼如下:

class Solution {
public:
    
    string longestPalindrome(string s) {

       int len=s.size();
       int maxium=0;
       int l=0;
       int size=0;
       bool dp[len+1][len+1];
       int j;
       for(int ll=0;ll<len;ll++){
           for(int i=0;i+ll<len;i++){
               j
=i+ll; if(ll==0){ dp[i][j]=1; } else if(ll==1){ dp[i][j]=(s[i]==s[j]); } else{ dp[i][j]=(s[i]==s[j]&&dp[i+1][j-1]); }
if(dp[i][j]&&maxium<j-i+1){ maxium=max(maxium,j-i+1); l=i; size=ll+1; } } } return s.substr(l,size); } };