• 130、★LeetCode-115.不同的子序列


    题目:

    给定一个字符串 s 和一个字符串 t ,计算在 s 的子序列中 t 出现的个数。

    字符串的一个 子序列 是指,通过删除一些(也可以不删除)字符且不干扰剩余字符相对位置所组成的新字符串。(例如,"ACE" 是 "ABCDE" 的一个子序列,而 "AEC" 不是)

    题目数据保证答案符合 32 位带符号整数范围。

    来源:力扣(LeetCode)
    链接:https://leetcode.cn/problems/distinct-subsequences

    思路:

    1. dp数组记录,此时分别以当前位置字符结尾时,子序列的数目!

    2.当前字符相同,就可以将各自减一的个数(当前互相匹配) + 之前减一的s中已经包含的t的数目!

    3.当前字符不同,只用将之前s减一时包含的此时t的个数挪下来即可!

    需要初始化,每一行第一列的个数为1!

    代码:

    1)动态规划:时间复杂度为 O(N^2)

    1. class Solution {
    2. public int numDistinct(String s, String t) {
    3. //还是进行子序列的比较,之前只是判断是否为子序列,此时要计算
    4. int s1 = s.length();
    5. int t1 = t.length();
    6. int[][] dp = new int[s1 + 1][t1 + 1];
    7. //初始化!将每一行的第一列初始化为1
    8. for(int i = 0;i < s1;i++){
    9. dp[i][0] = 1;
    10. }
    11. for(int i = 1;i <= s1;i++){
    12. for(int j = 1;j <= t1;j++){
    13. if(s.charAt(i - 1) == t.charAt(j - 1)){
    14. //相同:将上挪下来 + 上左
    15. dp[i][j] = dp[i - 1][j - 1] + dp[i - 1][j];
    16. }
    17. else{
    18. //不相同:直接挪下来即可
    19. dp[i][j] = dp[i - 1][j];
    20. }
    21. }
    22. }
    23. return dp[s1][t1];
    24. }
    25. }

    2)使用滚动数组,优化空间复杂度

    1. class Solution {
    2. public int numDistinct(String s, String t) {
    3. //还是进行子序列的比较,之前只是判断是否为子序列,此时要计算
    4. int s1 = s.length();
    5. int t1 = t.length();
    6. //进行优化:一维数组;
    7. //二维数组中看出来,只用到了上一行的内容;只用倒着进行更新,不会使用到当前行的内容即可
    8. int[] dp = new int[t1 + 1];
    9. dp[0] = 1;
    10. for(int i = 1;i <= s1;i++){//更新的层:从上往下走
    11. for(int j = t1;j > 0;j--){//更新列时:从后往前,防止覆盖
    12. if(s.charAt(i - 1) == t.charAt(j - 1)){
    13. dp[j] = dp[j] + dp[j - 1];
    14. }
    15. //其他情况时,不用进行更新
    16. }
    17. }
    18. return dp[t1];
    19. }
    20. }

  • 相关阅读:
    hdfs读流程
    vs 2019怎么运行单个的cpp文件以及报错main已存在解决方法
    基于jsp+java+ssm的农产品购物商城系统-计算机毕业设计
    蒙特卡洛树搜索方法介绍——算力聚焦方法(一) Dyna-Q+
    易基因技术推介|植物内生菌宏基因组研究
    JS-37-jQuery06-ajax
    nginx反向代理与负载均衡
    [计算机入门] Windows功能的安装与卸载
    LoadRunner常见的报错-1
    工业智能网关BL110应用之七十八: 实现西门子S7-400 PLC 接入MQTT Client One云平台
  • 原文地址:https://blog.csdn.net/weixin_54532276/article/details/126684463