zoukankan      html  css  js  c++  java
  • 115. Distinct Subsequences

    Problem:

    思路

    用DP算法。状态方程为:

    s[i-1] == t[j-1]  dp[i][j] = dp[i-1][j-1] + dp[i-1][j]    //如果相等时,就考虑2种可能情况,包括s[i-1]和不包括s[i-1]的情况。
    s[i-1] != t[j-1]  dp[i][j] = dp[i-1][j]                   //不相等时只需考虑不包括s[i-1]的情况。
    

    Solution (C++):

    int numDistinct(string s, string t) {
        int m = s.size(), n = t.size();     //size()和length()方法均可
        vector<vector<long>> dp(m+1, vector<long>(n+1, 0));
        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)
                dp[i][j] = dp[i-1][j] + (s[i-1] == t[j-1] ? dp[i-1][j-1] : 0);
        
        return dp[m][n];
    }
    

    性能

    Runtime: 12 ms  Memory Usage: 15.6 MB

    思路

    Solution (C++):

    int m = s.size(), n = t.size();     //size()和length()方法均可
    vector<long long> dp(n+1, 0);
    dp[0]= 1;
    for (int i = 1; i <= m; ++i) {
        int pre = 1;
        for (int j = 1; j <= n; ++j) {
            int tmp = dp[j];
            dp[j] += (s[i-1] == t[j-1] ? pre : 0);
            pre = tmp;
        }
    }
    return dp[n];
    

    性能

    Runtime: 8 ms  Memory Usage: 8.9 MB

    相关链接如下:

    知乎:littledy

    欢迎关注个人微信公众号:小邓杂谈,扫描下方二维码即可

    作者:littledy
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    Linux 环境变量 设置 etc profile
    Linux 升级glibc-2.14 失败 我遇到的问题
    qt窗口的切换
    qt事件机制---事件范例
    qt中的事件机制
    qt的信号与槽函数
    linux下qt的安装
    qt中的udp编程
    qt中的tcp编程
    qt中的多线程
  • 原文地址:https://www.cnblogs.com/dysjtu1995/p/12327834.html
Copyright © 2011-2022 走看看