【
最長の回文配列を検索する文字列sを、与えられました。S 1000の最大長さをとることができます。
例1:
入力:
"bbbab"
出力:
4
可能な最長の回文配列は、「BBBB」です。
例2:
入力:
"cbbd"
出力:
2
可能な最長の回文配列は、「BB」です。
出典:滞在ボタン(LeetCode)
//leetcode-cn.com/problems/longest-palindromic-subsequence:リンク:httpsの
すべてのネットワークからの控除が著作権を保有。商業転載は、ソースを明記してください許可公式、非商用の転載をご連絡ください。
】
動的プログラミングは、DP [i] [j]はi乃至j以来最長のシーケンスを表し、私は最後の要素からここに注意を払うに始め、その後、漸化式は次のとおりです。
DP [I] [J] = MAX(DP [I + 1] [j]は、DP [I]、[J-1]); DP [I] [J] = DP [I + 1] [J-1] + 2;戻り値DP [0] [lenの-1]
#defined MAX(a, b) (a) > (b) ? (a) : (b)
int longestPalindromeSubseq(char * s){
int len = strlen(s);
int i, j;
if (len == 0) return 0;
int dp[len][len];
memset(dp, 0, sizeof(int) * len * len);
for (i = len - 1; i >= 0; i--) {
dp[i][i] = 1;
for (j = i + 1; j < len; j++) {
if (s[i] == s[j]) {
dp[i][j] = dp[i+1][j-1] + 2;
} else {
dp[i][j] = MAX(dp[i+1][j], dp[i][j-1]);
}
}
}
return dp[0][len-1];
}