Leetcode: 【每日一题】- 2020-02-28 -115. 不同的子序列

Created on 28 Feb 2020  ·  2Comments  ·  Source: azl397985856/leetcode

给定一个字符串 S 和一个字符串 T,计算在 S 的子序列中 T 出现的个数。

一个字符串的一个子序列是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)

示例 1:

输入: S = "rabbbit", T = "rabbit"
输出: 3
解释:

如下图所示, 有 3 种可以从 S 中得到 "rabbit" 的方案。
(上箭头符号 ^ 表示选取的字母)

rabbbit
^^^^ ^^
rabbbit
^^ ^^^^
rabbbit
^^^ ^^^
示例 2:

输入: S = "babgbag", T = "bag"
输出: 5
解释:

如下图所示, 有 5 种可以从 S 中得到 "bag" 的方案。
(上箭头符号 ^ 表示选取的字母)

babgbag
^^ ^
babgbag
^^ ^
babgbag
^ ^^
babgbag
^ ^^
babgbag
^^^

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/distinct-subsequences
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

DP Daily Question Hard LeetCode String stale

Most helpful comment

var numDistinct = function(s, t) {
  let m = s.length,
      n = t.length,
      dp = new Array(n + 1);

  for (let i = 0; i <= n; i++) dp[i] = new Array(m + 1).fill(0);
  for (let i = 0; i <= m; i++) dp[0][i] = 1;

  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= m; j++) {
      dp[i][j] += dp[i][j - 1];
      if (s.charAt(j - 1) === t.charAt(i - 1)) {
        dp[i][j] += dp[i - 1][j - 1];
      }
    }
  }

  return dp[n][m];
};

All 2 comments

var numDistinct = function(s, t) {
  let m = s.length,
      n = t.length,
      dp = new Array(n + 1);

  for (let i = 0; i <= n; i++) dp[i] = new Array(m + 1).fill(0);
  for (let i = 0; i <= m; i++) dp[0][i] = 1;

  for (let i = 1; i <= n; i++) {
    for (let j = 1; j <= m; j++) {
      dp[i][j] += dp[i][j - 1];
      if (s.charAt(j - 1) === t.charAt(i - 1)) {
        dp[i][j] += dp[i - 1][j - 1];
      }
    }
  }

  return dp[n][m];
};

This issue has been automatically marked as stale because it has not had recent activity. It will be closed if no further activity occurs. Thank you for your contributions.

Was this page helpful?
0 / 5 - 0 ratings