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

LeetCode115:不同的子序列

题目链接:115. 不同的子序列 - 力扣(LeetCode)

代码如下:

class Solution {
public:
    int numDistinct(string s, string t) {
        int len1 = s.size() + 1;
        int len2 = t.size() + 1;
        int mod = 1e9 + 7;
        vector<vector<int> > dp(len1 + 1, vector<int>(len2 + 1));
        for(int i = 0; i < len1; i++)
        {
            dp[i][0] = 1;
        }
        for(int j = 1; j < len2; j++)
        {
            dp[0][j] = 0;
        }
        for(int i = 1; i <= len1; i++)
        {
            for(int j = 1; j <= len2; j++)
            {
                if(s[i - 1] == t[j - 1])
                {
                    dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j])%mod;
                }
                else
                {
                    dp[i][j] = (dp[i - 1][j])%mod;
                }
            }
        }
        return dp[len1][len2];
    }
};

dp含义:以i-1为结尾的s中有以j-1为结尾的t的个数为

dp递推公式:

if(s[i - 1] == t[j - 1])
{
           dp[i][j] = (dp[i - 1][j - 1] + dp[i - 1][j])%mod;
}
else

{
           dp[i][j] = (dp[i - 1][j])%mod;
}

这个是因为先判断s[i - 1]==t[i - 1]的话,第一种情况就是我们的s和t串都往前走一个单位,这个算一个,然后再加上能够符合这个条件的方案,也即是dp[i - 1][j],这个就是t串不走了,但是s串能往前走,并且还相等的。不相同的话,那么肯定是让dp[i - 1][j]也就是让s串往前走,不做任何操作。因为本题中说需要除以mod,那么我们需要在每一步都除以mod即可。
初始化:

这个我们需要画一个2*2的方格,也就是我们需要看见这个初始化是需要初始化成几?我们才能够往下面去进行后续递推公式的一个推到。这里就把dp[i][0] = 1;dp[0][j] = 0;

遍历顺序:

这个也需要我们去画一个2*2的方格,然后去看到这个dp[i][j]是从哪两个方向推导出来的,比如这个题,就可以从由上到下,由左到右推导出来这个公式,那么遍历顺序就直接从1开始就好

返回值:

这个题目需要返回的是这两个字符串的长度,因为我们就是根据这个字符串的长度来去求这个不同的子序列问题。


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

相关文章:

  • Java接入Hive
  • 2023 春季测试 题解
  • 函数声明不是原型error: function declaration isn’t a prototype
  • 3216. 交换后字典序最小的字符串
  • java-web-day5
  • Linux开放端口问题(同一局域网)
  • 浅析正交投影矩阵和透视投影矩阵的推导
  • OpenJudge:找和为K的两个元素
  • Flutter 自定义组件继承与调用的高级使用方式
  • 重构代码之提取子类
  • 聚水潭商品信息集成到MySQL的高效解决方案
  • 蓝海创意云入选中国夏衍电影学会工业与科技影视专业委员会成员单位
  • PyTorch distributions模块介绍
  • Mybatis-09.基础操作-删除(预编译SQL)
  • 从零学习大模型(八)-----P-Tuning(上)
  • 【大数据学习 | kafka】kafka的shell操作
  • 【数据库】数据库管理(下)存储过程 触发器 慢查询日志 备份与恢复
  • 在vue项目中,如何写一个自定义指令
  • 【JavaScript】JavaScript 进阶-3-编程思想构造函数原型(更新中)
  • python 实现了一个简单的五子棋游戏
  • 三季度业绩获多家机构首肯,“听劝的”B站终于“起死回生”?
  • Python的协程与传统的线程相比,是否能更有效地利用计算资源?在多大程度上,这种效率是可测量的?如何量化Python协程的优势|协程|线程|性能优化
  • 【系统设计】深入理解HTTP缓存机制:从Read-Through缓存到HTTP缓存的交互流程
  • 小红书小眼睛低于100的进
  • 视频协议与封装格式
  • 题目:输入某年某月某日,判断这一天是这一年的第几天?