zoukankan      html  css  js  c++  java
  • LeetCode "Distinct Subsequences"

    A classic and representative DP problem. To be revised later. Quite a few interesting details to think about.

    class Solution {
    public:
        int numDistinct(string S, string T) {
            int lenS = S.length();
            int lenT = T.length();
            if (lenS < lenT) return 0;
            if (lenS == lenT)
            {
                if (S.compare(T) == 0) return 1;
                else return 0;
            }
    
            vector<int> dp(lenT + 1, 0);
            dp[0] = 1;            // Point 1
    
            //    S: i, T: j
            //    if S[i-1] == T[j - 1]
            //        dp[i][j] = dp[i - 1][j] + dp[i - 1][j - 1]
            //    else
            //        dp[i][j] = dp[i - 1][j]
            for (int i = 1; i <= lenS; i ++)
            for (int j = lenT; j >= 1; j--) // Point 2
            {
                if(i < j) continue;
                if (S[i - 1] == T[j - 1])
                    dp[j] += dp[j - 1];  // Point 3
            }
            return dp[lenT];
        }
    };
  • 相关阅读:
    P1093 奖学金
    华容道
    回文数
    P1654 OSU!
    Noip P1063 能量项链
    Noip 寻宝
    NOIP 2009 普及组 第三题 细胞分裂
    拦截器
    OGNL
    Struts2 配置详解
  • 原文地址:https://www.cnblogs.com/tonix/p/3926771.html
Copyright © 2011-2022 走看看