最長回文子串行 動態規劃

2021-08-17 21:22:20 字數 958 閱讀 9903

所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如「aba」、「c」,對於乙個字串,可以通過刪除某些字元而變成回文字串,如「cabebaf」,刪除』c』、』e』、『f』後剩下子串「abba」就是回文字串。

要求,給定任意乙個字串,字串最大長度1000,計算出最長的回文子串行長度。

如「cabebaf」的回文串包括「c」、「aba」、「abba」等,最長回文子串行「abba」長度為4。

如「google」,輸出2。

如「abc,bad」,輸出2。

注意這裡要求的是最長回文子串行。不是最長回文串。

最常用的手段當然是dfs。但dfs對於1000長度的字串,肯定會超時。

因為有很多重疊的地方。

通過遞迴。重疊的地方如l(1,4)。

動態規劃方法。

用犧牲空間換時間的方法,通過自下而上的方式記錄子問題的最優解。

#include 

#define _xx ios_base::sync_with_stdio(0);cin.tie(0);

using

namespace

std;

typedef

long

long ll;

//動態規劃求解最長回文子串行,時間複雜度為o(n^2)

int dp[1300][1300];

int lpsdp(char *str)

else

dp[j][j + i] = tmp;}}

return dp[0][len - 1]; //返回字串str[0...n-1]的最長回文子串行長度

}char str[1300];

int main()

求最長回文子串行(動態規劃)

include include includeusing namespace std define maxn 1000 動態規劃求解最長回文子串行,時間複雜度為o n 2 int lpsdp char str,int n return dp 0 n 1 返回字串str 0.n 1 的最長回文子串行長...

最長回文序列與最長公共子串行(動態規劃)

最長回文序列 longest palindromic subsequence 回文序列 正向遍歷與反向遍歷都相同的序列 在原字串中的位置不一定連續 給定乙個字串,求其最長的回文序列的長度。例如,給定字串是 bbabcbcab 則最長回文序列的長度為7,bacbcab 為其中乙個最長回文序列。用lps...

動態規劃 最長回文子串行

之前並沒有想過求解 最長回文子串行 的方法,但是自己想想也是沒有什麼好的辦法可以求出 最長回文子串行 來,而最近遇到了一道題目,在經過問題分析,轉化之後,其根本的問題就是 最長回文子串行 的求解問題。題意 兩隻兔子在乙個由n個數字組成的環上,乙隻只能順時針跳,另乙隻只能逆時針跳。跳的規則如下 1 以...