zoukankan      html  css  js  c++  java
  • 不同的子序列 · Distinct Subsequences

    [抄题]:

    给出字符串S和字符串T,计算S的不同的子序列中T出现的个数。

    子序列字符串是原始字符串通过删除一些(或零个)产生的一个新的字符串,并且对剩下的字符的相对位置没有影响。(比如,“ACE”“ABCDE”的子序列字符串,而“AEC”不是)。 

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

    Return 3.

    [思维问题]:

    [一句话思路]:

    由于要查找T。最后一位相同时可以同时删,不相同时只能删S,不能多删除T

    [输入量]:空: 正常情况:特大:特小:程序里处理到的特殊情况:异常情况(不合法不合理的输入):

    [画图]:

    怎么找出递推函数function:举实际的例子

     

    [一刷]:

    1. f[0][0] = 1
    2. 扫描s的每个字母前先初始化,在过程中累加

    [二刷]:

    [三刷]:

    [四刷]:

    [五刷]:

      [五分钟肉眼debug的结果]:

    草稿上把+=写清楚

    "aab"
    "ab"

     

    [总结]:

    怎么找出递推函数function:举实际的例子。

    求个数时,一般情况是等于,只有重复情况下 个数增多才是相加。

    [复杂度]:Time complexity: O(n^2) Space complexity: O(n^2)

    DP先想暴力解法:Cn x 不行

    [英文数据结构或算法,为什么不用别的数据结构或算法]:

    双序列DP

    [其他解法]:

    [Follow Up]:

    [LC给出的题目变变变]:

    5. Longest Palindromic Substring 回文串最值 用dp

     [代码风格] :

    public class Solution {
        /*
         * @param : A string
         * @param : A string
         * @return: Count the number of distinct subsequences
         */
        public int numDistinct(String s, String t) {
            //state
            int m = s.length();
            int n = t.length();
            int[][] f = new int[m + 1][n + 1];
            //initialization
            //m == 0
            for (int i = 0; i <= n; i++) {
                f[0][i] = 0;
            }
            // n == 0
            for (int j = 0; j <= m; j++) {
                f[j][0] = 1;
            }
            //function
            for (int i = 1; i <= m; i++) {
                for (int j = 1; j <= n; j++) {
                        f[i][j] = f[i - 1][j];
                        if (s.charAt(i - 1) == t.charAt(j - 1)) {
                            f[i][j] += f[i - 1][j - 1];
                        }
                }
            }
            //answer
            return f[m][n];
        }
    };
    View Code
  • 相关阅读:
    1.惨不忍睹凌乱的定时任务
    二维码名片
    给定的逗号分隔的数字字符串转换为Table
    sql 列集合转换成逗号分隔的字符类型
    linq 分组
    触发器
    整合思路、步骤
    整合注意事项
    配置文件
    Struts2的线程安全性
  • 原文地址:https://www.cnblogs.com/immiao0319/p/8442837.html
Copyright © 2011-2022 走看看