所謂回文字串,就是乙個字串,從左到右讀和從右到左讀是完全一樣的,比如「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 以...