• Distinct Subsequences


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

    Here is an example:
    S = "rabbbit", T = "rabbit"

    Return 3.

    思路:

      动态规划

    我的代码:

    public class Solution {
        public int numDistinct(String S, String T) {
            if(S == null || S.length() == 0 || T == null || T.length() == 0)    return 0;
            int cols = S.length();
            int rows = T.length();
            if(rows > cols) return 0;
            int[][] dp = new int[rows+1][cols+1];
            for(int j = 0; j <= cols; j++)
            {
                dp[0][j] = 1;
            }
            for(int i = 1; i <= rows; i++)
            {
                for(int j = 1; j <= cols; j++)
                {
                    dp[i][j] = dp[i][j-1];
                    if(S.charAt(j-1) == T.charAt(i-1))
                    {
                        dp[i][j] += dp[i-1][j-1];
                    }
                }
            }
            return dp[rows][cols];
        }
    }
    View Code

    学习之处:

    • 之前不知道动态规划方程怎么写,今天晚上强化了这方面,认真的思考了,想了想方法,现在总算有点眉目了,两道hard的题,都自己想出来,然后ac
    • 在这里再次强调一下如何写动态规划方程,多做题,自然就有感觉了,另外动态规划考察的是逆向思维,从dfs逆向思维到动态规划方程中。
    • 两种模式 二元动态规划方程f(m,n) = f(m,n-1)+f(m-1,n-1) 一元动规方程 f(n)= f(n-1)+f(n-2)+...+f(1) 
  • 相关阅读:
    寻找我的黑客偶像
    20201215 《信息安全专业导论》第三周学习总结
    罗马数字
    base编码
    20201215 王馨瑶 第2周学习总结
    罗马数字转阿拉伯数字
    2020-2021-1 20201226 《信息安全专业导论》第三周学习总结
    IEEE754 浮点数
    Base64
    2020-2021-1 20201226 《信息安全专业导论》第2周学习总结
  • 原文地址:https://www.cnblogs.com/sunshisonghit/p/4374838.html
Copyright © 2020-2023  润新知