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

    题目:给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)题目数据保证答案符合 32 位带符号整数范围。

    示例 :

    输入:s = "rabbbit", t = "rabbit"
    输出:3
    解释:
    如下图所示, 有 3 种可以从 s 中得到 "rabbit" 的方案。
    (上箭头符号 ^ 表示选取的字母)
    rabbbit
    ^^^^ ^^
    rabbbit
    ^^ ^^^^
    rabbbit
    ^^^ ^^^

    解答:

    class Solution {//动态规划
    public:
        int numDistinct(string s, string t) {
            int m = s.length(), n = t.length();
            if (m < n) {
                return 0;
            }
            vector<vector<long>> dp(m + 1, vector<long>(n + 1));
            for (int i = 0; i <= m; i++) {
                dp[i][n] = 1;
            }
            for (int i = m - 1; i >= 0; i--) {
            //下标操作符[] 和 成员函数at()。两者均返回指定的下标位置的字符            
                char sChar = s.at(i);
                for (int j = n - 1; j >= 0; j--) {
                    char tChar = t.at(j);
                    if (sChar == tChar) {
                        dp[i][j] = dp[i + 1][j + 1] + dp[i + 1][j];
                    } else {
                        dp[i][j] = dp[i + 1][j];
                    }
                }
            }
            return dp[0][0];
        }
    };
  • 相关阅读:
    每日日报
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    Java学习
    JAVA日报
  • 原文地址:https://www.cnblogs.com/USTC-ZCC/p/14547585.html
Copyright © 2011-2022 走看看