(LC)115。さまざまなサブシーケンス

115.さまざまなサブシーケンス

文字列sと文字列tが与えられた場合、sのサブシーケンスでのtの出現回数を数えます。

文字列のサブシーケンスとは、残りの文字の相対位置を乱すことなく、一部の文字を削除する(または削除しない)ことによって形成される新しい文字列を指します。(たとえば、「ACE」は「ABCDE」のサブシーケンスですが、「AEC」はそうではありません)

質問データは、回答が32ビットの符号付き整数の範囲に収まることを保証します。

例1:

入力:s = "rabbbit"、t = "rabbit"
出力:3
説明:
次の図に示すように、sから "rabbit"を取得できるスキームは3つあります。
(上矢印記号^は選択した文字を示します)
rabbbit ^^^^
^^
rabbbit
^^
^^^^ rabbbit
^^^ ^^^
例2:

入力:s = "babgbag"、t = "bag"
出力:5
説明:
次の図に示すように、sから "bag"を取得できるスキームは5つあります。
(上矢印記号^は選択した文字を示します)
babgbag
^^ ^
babgbag
^^ ^
babgbag
^ ^^
babgbag
^ ^^
babgbag
^^^

促す:

0 <= s.length、t.length <= 1000s
およびtは英語の文字で構成されます

 public int numDistinct(String s, String t) {
    
    
         int[][] dp = new int[t.length()+1][s.length()+1];
		 for(int i=0; i<s.length()+1; i++) {
    
    
			 dp[0][i] = 1;
		 }
		 
		 for (int i=1; i<t.length()+1; i++) {
    
    
			 for (int j = 1;j<s.length()+1; j++) {
    
    
				 if (t.charAt(i-1) == s.charAt(j-1)) {
    
    
					 dp[i][j] = dp[i-1][j-1] + dp[i][j-1];
				 } else {
    
    
					 dp[i][j] = dp[i][j-1];
				 }
			 }
		 }
		 
		 return dp[t.length()][s.length()];
    }

ここに画像の説明を挿入

おすすめ

転載: blog.csdn.net/weixin_45567738/article/details/114948403