[516] C言語ブラシLeetCode最長パリンドローム配列(M)

最長の回文配列を検索する文字列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];
}

 

公開された149元の記事 ウォン称賛17 ビュー110 000 +

おすすめ

転載: blog.csdn.net/jin615567975/article/details/104416887