zoukankan      html  css  js  c++  java
  • 115. 不同的子序列

    给定一个字符串 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
        ^^^

    class Solution {
        public int numDistinct(String s, String t) {
            int m = s.length();
            int n = t.length();
            int[][] dp = new int[m + 1][n + 1];
            for(int i = 0;i <= m;i++){
                dp[i][0] = 1;
            }
            for(int i = 1;i <= m;i++){
                for(int j = 1;j <= n;j++){
                    if(s.charAt( i - 1) == t.charAt(j - 1)){
                        //用上此字符或者不用,和
                        dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
                    }else{
                        //无法用上
                        dp[i][j] = dp[i - 1][j];
                    }
                }
            }
            return dp[m][n];
        }
    }
    一回生,二回熟
  • 相关阅读:
    iView
    JS
    JS
    JS
    Java
    Java
    Java
    Java
    Java
    Java
  • 原文地址:https://www.cnblogs.com/zzytxl/p/12686772.html
Copyright © 2011-2022 走看看