LeetCode最長の共通サブシーケンスJava動的プログラミングには図があります

タイトル説明

2つの文字列text1とtext2が与えられた場合、これら2つの文字列の最も長い共通部分列の長さを返します。

文字列のサブシーケンスは新しい文字列を参照します。これは、文字の相対的な順序を変更せずに元の文字列から一部の文字(または文字なし)を削除することによって形成される新しい文字列です。

たとえば

"ace""abcde" 的子序列,但 "aec" 不是 
"abcde" 的子序列。两个字符串的「公共子序列」
是这两个字符串所共同拥有的子序列。

2つの文字列に共通のサブシーケンスがない場合、0が返されます。

例1:

输入:text1 = "abcde", text2 = "ace" 
输出:3  
解释:最长公共子序列是 "ace",它的长度为 3

例2:

输入:text1 = "abc", text2 = "abc"
输出:3
解释:最长公共子序列是 "abc",它的长度为 3

例3:

输入:text1 = "abc", text2 = "def"
输出:0
解释:两个字符串没有公共子序列,返回 0

促す:

1 <= text1.length <= 1000
1 <= text2.length <= 1000
输入的字符串只含有小写英文字符。

ソース:LeetCode(LeetCode)
リンク:https ://leetcode-cn.com/problems/longest-common-subsequence
著作権はLeetCode が所有しています商用転載については、正式な許可書にご連絡ください。非商用転載については、出典を明記してください。

問題解決のアイデア:
DPはどうですか?タイトルには何を設定しますか?2つの文字列なので、最初の文字の最初のi文字と2番目の文字を表す2次元配列dp [i] [j]を設定します文字の最初のj文字で形成できる最長のサブシーケンス。例では、サブシーケンスが不連続になる可能性があるため、最長の肯定dp[t1.length][t2.length]
次に、最後のステップを見て、

1.何if t1.charAt(t1.length-1)和t2.charAt(t2.length-1)不相等;
をしますか?dp [t1.length-1-1] [t2.length-1-1]と直接等しいですか?いいえ、このサブシーケンスは不連続になる可能性があるため、絵を描きましょう。最後の長さが等しくない場合

はい不包含两者中的至少一个、dp [i-1] [j-1]を含めませんか?これを状態遷移方程式に追加することは可能であり、正しい答えを得ることができますが、dp [i-1] [j-1]は小于等于dp [i] [j-1]、dp [i-1]でなければならないため、必要ありません。 [j]、maxを取得することは不可能です。iとjが大きいほど、同じ回文が含まれる可能性があります。紙に描くと明らかです。私はそれを描かないのが面倒です

2.等しい場合は、直接dp [i] [j] = dp [i-1] [j-1] +1;これを十分に理解
してからコーディングする必要があります。

class Solution {
    
    
    public int longestCommonSubsequence(String text1, String text2) {
    
    
            char s1[]=text1.toCharArray();
            char s2[]=text2.toCharArray();
            int x=s1.length;
            int y=s2.length;
            int dp[][]=new int[x+1][y+1];
            for(int i=1;i<=x;i++){
    
    
                for(int j=1;j<=y;j++){
    
    
                    if(s1[i-1]==s2[j-1])
                    dp[i][j]=dp[i-1][j-1]+1;
                    else{
    
    
                        dp[i][j]=Math.max(dp[i-1][j],dp[i][j-1]);
                    }
                }
            }
            return dp[x][y];
    }
}

おすすめ

転載: blog.csdn.net/qq_44844588/article/details/107658930