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

代码随想录算法训练营day50|动态规划12

不同的子序列

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

编辑距离中的删除元素,其实就是直接变数字,其只删除原来的较长的数组里的元素
在这里插入图片描述

递推模拟,使用s的最后一个元素匹配,或者删除最后一个元素看前面一个是否匹配
在这里插入图片描述

初始化,dp[i][0]=1表示s不为空,t为空,这样把s删到空就一定有一个,同理dp[0][i]=0,重叠部分dp[0][0]就等于空字符串匹配空字符串,为1

在这里插入图片描述

定义为int,出现了超时错误
在这里插入图片描述
在这里插入图片描述
所以可以用longlongint 的别名 uint64_t

class Solution {
public:int numDistinct(string s, string t) {vector<vector<uint64_t>> dp(s.size()+1,vector<uint64_t>(t.size()+1));for(int i=0;i<s.size();i++) dp[i][0]=1;for(int j=1;j<t.size();j++) dp[0][j]=0;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()];}
};

两个字符串的删除操作

其实就是两个字符串都可以删除了

递推公式如下
在这里插入图片描述

class Solution {
public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()+1,vector<int>(word2.size()+1));for(int i=0;i<=word1.size();i++) dp[i][0]=i;for(int j=0;j<=word2.size();j++) dp[0][j]=j;for(int i=1;i<=word1.size();i++){for(int j=1;j<=word2.size();j++){if(word1[i-1]==word2[j-1]) dp[i][j]=dp[i-1][j-1];else dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1);}}return dp[word1.size()][word2.size()];}
};

思路二是,先求出公共子序列的长度,再用两个字符串的总长度减去公共子序列的长度

class Solution {
public:int minDistance(string word1, string word2) {vector<vector<int>> dp(word1.size()+1, vector<int>(word2.size()+1, 0));for (int i=1; i<=word1.size(); i++){for (int j=1; j<=word2.size(); j++){if (word1[i-1] == word2[j-1]) dp[i][j] = dp[i-1][j-1] + 1;else dp[i][j] = max(dp[i-1][j], dp[i][j-1]);}}return word1.size()+word2.size()-dp[word1.size()][word2.size()]*2;}
};

编辑距离(动规经典问题)

在这里插入图片描述
在这里插入图片描述

=为什么这道题不能采用上一题的思路二,先求出公共子序列的长度,再用两个字符串的总长度减去公共子序列的长度,因为很可能长度一样,但可以只替换一次就完成,但思路2会要求按着顺序删除

http://www.lryc.cn/news/499559.html

相关文章:

  • JavaWeb学习(2)(Cookie原理(超详细)、HTTP无状态)
  • java抽象类
  • minio集群部署–linux环境
  • 在vue3里使用scss实现简单的换肤功能
  • JavaScript编写css自定义属性
  • 我们来学webservie - WSDL
  • 【Agent】构建智能诗歌创作系统:基于多 Agent 的协同创作实现
  • 001 LVGL PC端模拟搭建
  • AJAX三、XHR,基本使用,查询参数,数据提交,promise的三种状态,封装-简易axios-获取省份列表 / 获取地区列表 / 注册用户,天气预报
  • mybatis之数据统计与自定义异常处理
  • qt creator使用taglib读取音频元信息,windows平台vcpkg安装
  • 设计模式之生成器模式
  • python学opencv|读取图像(三)放大和缩小图像
  • 1 数据库(上):MySQL的概述和安装、SQL简介、IDEA连接数据库使用图形化界面
  • C++初阶—类与对象(中篇)
  • Leetcode15. 三数之和(HOT100)
  • Oracle数据库小白备忘
  • DDR4与DDR3服务器内存的关键区别有哪些?
  • Linux: shell: bash: set -x;调试使用
  • Hadoop生态圈框架部署 伪集群版(五)- HBase伪分布式部署
  • 自定义指令,全局,局部,注册
  • 静坐修心.
  • 设计模式c++(一)
  • 核密度估计——从直方图到核密度(核函数)估计_带宽选择
  • Vant UI Axure移动端元件库:提升移动端原型设计效率
  • 如何用 JavaScript 操作 DOM 元素?
  • 【Ubuntu】URDC(Ubuntu远程桌面助手)安装、用法,及莫名其妙进入全黑模式的处理
  • ES-DSL查询
  • npm 设置镜像
  • SpringMvc完整知识点一