115. 不同的子序列

103 阅读1分钟

115. 不同的子序列

  • var dp = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0));建模
  • dp[i][n] = 1;初始值
  • dp[i][j] = dp[i+1][j+1] +dp[i+1][j] (s[i] === t[j])动态方程
  • dp[i][j] = dp[i+1][j] (s[i] !== t[j])动态方程
var numDistinct = function (s, t) {
  var m = s.length,
    n = t.length;
  if (m < n) {
    return 0;
  }
  var dp = new Array(m + 1).fill(0).map(() => new Array(n + 1).fill(0));
  for (var i = 0; i <= m; i++) {
    dp[i][n] = 1;
  }
  for (var i = m - 1; i >= 0; i--) {
    for (var j = n - 1; j >= 0; j--) {
      if (s[i] == t[j]) {
        dp[i][j] = dp[i + 1][j + 1] + dp[i + 1][j];
      } else {
        dp[i][j] = dp[i + 1][j];
      }
    }
  }
  return dp[0][0];
};