当前位置: 首页 > article >正文

力扣-动态规划-115 不同子序列

思路

  1. dp数组定义:0_i-1的字符串中有0_j-1的字符串有dp[i][j]个
  2. 递推公式:
    if(s[i-1] == t[j-1]){
        dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
    }else{
        dp[i][j] = dp[i-1][j];
    }

    在该元素相同时,有两种可能1:使用该元素,所以0_i-2中有多少个0_j-2,这样再加上i-1和j-1,这满足了0_i-1的字符串中有0_j-1的字符串;第二种可能,不使用该元素,直接看0_i-2的字符串中有0_j-1的字符串            不相同时,只能不用i-1,要跳过i-1,所以沿用前一个结果

  3. dp数组初始化:for(int i = 0; i <= s.size(); i++) dp[i][0] = 1;
  4. 遍历顺序:顺序
  5. 时间复杂度:      O(n*m)

代码

class Solution {
public:
    int numDistinct(string s, string t) {
        long long mod = 10E9 + 7;
        vector< vector<long long>> dp(s.size() + 1, vector<long long>(t.size() + 1, 0));
        for(int i = 0; i <= s.size(); i++) dp[i][0] = 1;

        for(int i = 1; i <= s.size(); i++){
            for(int j = 1; j <= t.size(); j++){
                if(s[i-1] == t[j-1]){
                    dp[i][j] = dp[i-1][j-1] + dp[i-1][j];
                }else{
                    dp[i][j] = dp[i-1][j];
                }
            }
        }

        return dp[s.size()][t.size()];
    }
};  


http://www.kler.cn/a/571218.html

相关文章:

  • kubectl 运行脚本 kubernetes 部署springcloud微服务 yaml + Dockerfile+shell 脚本
  • 软件架构师日常工作和核心技能
  • 【Git原理与使用一】Git概念与基本操作
  • 人工智能 全部技术栈以及简单运用场景
  • GBT32960 协议编解码器的设计与实现
  • 概率论基础概念
  • leetcode 0018 四数之和-medium
  • 将 XML 文件转换为字典形式
  • AUTOSAR微控制器抽象层(MCAL)详解及综合实例
  • Docker安装Redpandata-console控制台
  • JavaWeb——MySQL-索引(3/3)-操作语法(索引操作语法概述、创建索引、查看索引、删除索引)
  • C++网络编程之Socket
  • 二分题目leetcode
  • 二百八十五、华为云PostgreSQL——建分区表并设置主键
  • 10.LED点阵实验
  • 安卓内存泄露之DMA-BUF异常增长:Android Studio镜像引起DMA内存泄露
  • Google chrome拦截某些下载内容
  • 基于EM期望最大化算法的GMM参数估计与三维数据分类系统python源码
  • 软件架构设计7大原则
  • ESP32之Flash操作