代码随想录第五十六天
创始人
2024-01-26 09:53:13
0

代码随想录第五十六天

583. 两个字符串的删除操作

给定两个单词 word1 和 word2,找到使得 word1 和 word2 相同所需的最小步数,每步可以删除任意一个字符串中的一个字符。
1、dp[i][j]:以word1[i-1]字符结尾,word2[j-1]字符结尾的两个字符串找到相同所需的最小步数
2、if word1[i-1]==word2[j-1]
dp[i][j]=dp[i-1][j-1],即此时啥都不用做,直接等于word1[i-2]和word2[j-2]找到相同子序列所需的最小步数就行
else
i、在word1[i-1]与word2[j-2]的基础上删除word2[j-1]
ii、在word1[i-2]与word2[j-1]的基础上删除word2[j-1]
iii、在word1[i-2]与word2[j-2]的基础上删除word1[i-1],word2[j-1]
dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+2)
3、初始化
dp[0][j]=j
dp[i][0]=i
4、外层遍历word1,内层遍历word2
5、模拟
代码如下:

int deleteSubSequence(string s, string t){vector>dp(s.size() + 1, vector(t.size() + 1, 0));for (int j=0;j<=t.size();j++){dp[0][j] = j;}for (int i=0;i<=s.size();i++){dp[i][0] = i;}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];}else{dp[i][j] = min(min(dp[i - 1][j] + 1, dp[i][j - 1] + 1), dp[i - 1][j - 1] + 2);}}}return dp[s.size()][t.size()];}

72. 编辑距离

给你两个单词 word1 和 word2,请你计算出将 word1 转换成 word2 所使用的最少操作数 。
你可以对一个单词进行如下三种操作:
插入一个字符
删除一个字符
替换一个字符
示例 1: 输入:word1 = “horse”, word2 = “ros” 输出:3 解释: horse -> rorse (将 ‘h’ 替换为 ‘r’) rorse -> rose (删除 ‘r’) rose -> ros (删除 ‘e’)
示例 2: 输入:word1 = “intention”, word2 = “execution” 输出:5 解释: intention -> inention (删除 ‘t’) inention -> enention (将 ‘i’ 替换为 ‘e’) enention -> exention (将 ‘n’ 替换为 ‘x’) exention -> exection (将 ‘n’ 替换为 ‘c’) exection -> execution (插入 ‘u’)

1、dp[i][j]:以word1[i-1]字符结尾,word2[j-1]字符结尾的两个字符串,将word1转换为word2的最小步骤
2、if word1[i-1]==word2[j-1]
dp[i][j]=dp[i-1][j-1],即此时啥都不用做,等于由word1[i-2]转换为word2[j-2]的步数就行
else
i、在word1[i-1]与word2[j-2]的基础上删除word2[j-1],相当于在word1中增加字符
ii、在word1[i-2]与word2[j-1]的基础上删除word2[j-1]
iii、在word1[i-2]与word2[j-2]的基础上将word1[i-1]替换为word2[j-1]
dp[i][j]=min(dp[i-1][j]+1,dp[i][j-1]+1,dp[i-1][j-1]+1)
3、初始化
dp[0][j]=j
dp[i][0]=i
4、外层遍历word1,内层遍历word2
5、模拟
代码如下:

int editeDistance(string s, string t){vector>dp(s.size() + 1, vector(t.size() + 1, 0));for (int j=0;j<=t.size();j++){dp[0][j] = j;}for (int i=0;i<=s.size();i++){dp[i][0] = i;}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];}else{int tmp = min(dp[i][j - 1] + 1, dp[i - 1][j] + 1);dp[i][j] = min(dp[i - 1][j - 1] + 1, tmp);}}}return dp[s.size()][t.size()];}

相关内容

热门资讯

喜欢穿一身黑的男生性格(喜欢穿... 今天百科达人给各位分享喜欢穿一身黑的男生性格的知识,其中也会对喜欢穿一身黑衣服的男人人好相处吗进行解...
发春是什么意思(思春和发春是什... 本篇文章极速百科给大家谈谈发春是什么意思,以及思春和发春是什么意思对应的知识点,希望对各位有所帮助,...
网络用语zl是什么意思(zl是... 今天给各位分享网络用语zl是什么意思的知识,其中也会对zl是啥意思是什么网络用语进行解释,如果能碰巧...
为什么酷狗音乐自己唱的歌不能下... 本篇文章极速百科小编给大家谈谈为什么酷狗音乐自己唱的歌不能下载到本地?,以及为什么酷狗下载的歌曲不是...
华为下载未安装的文件去哪找(华... 今天百科达人给各位分享华为下载未安装的文件去哪找的知识,其中也会对华为下载未安装的文件去哪找到进行解...
怎么往应用助手里添加应用(应用... 今天百科达人给各位分享怎么往应用助手里添加应用的知识,其中也会对应用助手怎么添加微信进行解释,如果能...
家里可以做假山养金鱼吗(假山能... 今天百科达人给各位分享家里可以做假山养金鱼吗的知识,其中也会对假山能放鱼缸里吗进行解释,如果能碰巧解...
四分五裂是什么生肖什么动物(四... 本篇文章极速百科小编给大家谈谈四分五裂是什么生肖什么动物,以及四分五裂打一生肖是什么对应的知识点,希...
一帆风顺二龙腾飞三阳开泰祝福语... 本篇文章极速百科给大家谈谈一帆风顺二龙腾飞三阳开泰祝福语,以及一帆风顺二龙腾飞三阳开泰祝福语结婚对应...
美团联名卡审核成功待激活(美团... 今天百科达人给各位分享美团联名卡审核成功待激活的知识,其中也会对美团联名卡审核未通过进行解释,如果能...