zoukankan      html  css  js  c++  java
  • 【Lintcode】118.Distinct Subsequences

    题目:

    Given a string S and a string T, count the number of distinct subsequences of T in S.

    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).

    Example

    Given S = "rabbbit", T = "rabbit", return 3.

    题解:

    Solution 1 ()

    class Solution {
    public:
        int numDistinct(string &S, string &T) {
            int n1 = S.size(), n2 = T.size();
            vector<vector<int>> dp(n2 + 1, vector<int>(n1 + 1, 0));
            for (int i = 0; i <= n1; ++i) {
                dp[0][i] = 1;
            }
            for (int i = 1; i <= n2; ++i) {
                for (int j = 1; j <= n1; ++j) {
                    if (T[i - 1] == S[j - 1]) {
                        dp[i][j] = dp[i][j - 1] + dp[i - 1][j - 1];
                    } else {
                        dp[i][j] = dp[i][j - 1];
                    }
                }
            }
            return dp[n2][n1];
        }
    };

      Notice that we keep the whole m*n matrix simply for dp[i - 1][j - 1]. So we can simply store that value in a single variable and further optimize the space complexity. The final code is as follows.

    Solution 2 ()  from here

    class Solution {
    public:
        int numDistinct(string s, string t) {
            int m = t.length(), n = s.length();
            vector<int> cur(m + 1, 0);
            cur[0] = 1;
            for (int j = 1; j <= n; j++) { 
                int pre = 1;
                for (int i = 1; i <= m; i++) {
                    int temp = cur[i];
                    cur[i] = cur[i] + (t[i - 1] == s[j - 1] ? pre : 0);
                    pre = temp;
                }
            }
            return cur[m];
        }
    };
  • 相关阅读:
    jQuery 从无到有.一天完成.
    JavaScript从无到有(一天完成)
    HTML(第一篇)
    前端认识
    三元表达式,列表推导是,字典生成式
    ORM之youku项目小练习(上)
    高逼格壁纸
    pymysql 基操全套
    怎么学好编程?
    mysql 事务
  • 原文地址:https://www.cnblogs.com/Atanisi/p/6883376.html
Copyright © 2011-2022 走看看