Leetcode 115: Distinct Subsequences
Given a string S and a string T, count the number of distinct subsequences of S which equals T.
A subsequence of a string is a new string which is formed from the original string by deleting some (can be none) of the characters without disturbing the relative positions of the remaining characters. (ie, "ACE"
is a subsequence of "ABCDE"
while "AEC"
is not).
Here is an example:
S = "rabbbit"
, T = "rabbit"
Return 3
.
1 public class Solution { 2 public int NumDistinct(string s, string t) { 3 int sLen = s.Length, tLen = t.Length; 4 5 if (sLen < tLen) return 0; 6 if (tLen == 0) return 1; 7 8 var dp = new int[tLen + 1, sLen + 1]; 9 for (int j = 0; j <= sLen; j++) 10 { 11 dp[0, j] = 1; 12 } 13 14 for (int j = 1; j <= tLen; j++) 15 { 16 dp[j, 0] = 0; 17 } 18 19 for (int i = 1; i <= tLen; i++) 20 { 21 for (int j = i; j <= sLen; j++) 22 { 23 if (s[j - 1] == t[i - 1]) 24 { 25 dp[i, j] = dp[i - 1, j - 1] + dp[i, j - 1]; 26 } 27 else 28 { 29 dp[i, j] = dp[i, j - 1]; 30 } 31 } 32 } 33 34 return dp[tLen, sLen]; 35 } 36 }