您的位置:首页 > 娱乐 > 明星 > 外贸网站建设方法_可以在线观看的免费资源_谷歌浏览器 安卓下载2023版官网_优化网站建设

外贸网站建设方法_可以在线观看的免费资源_谷歌浏览器 安卓下载2023版官网_优化网站建设

2024/12/23 10:58:14 来源:https://blog.csdn.net/Ricky_youngone/article/details/143335289  浏览:    关键词:外贸网站建设方法_可以在线观看的免费资源_谷歌浏览器 安卓下载2023版官网_优化网站建设
外贸网站建设方法_可以在线观看的免费资源_谷歌浏览器 安卓下载2023版官网_优化网站建设

题目链接:583. 两个字符串的删除操作 - 力扣(LeetCode)

代码如下:

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(min(dp[i - 1][j] + 1, dp[i][j - 1] + 1), dp[i - 1][j - 1] + 2);}}}return dp[word1.size()][word2.size()];}
};

dp的含义:以i-1的word1和j-1的word2两个字符串删除使得相同的最小步数

这里的i-1和j-1是为了方便后续的初始化。

dp的递推公式

if(word1[i - 1] == word2[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);
}

这个其实还是这么判断嘛,这两个相同的话,那么就直接让两个字符串往前走即可,这个时候不需要删除,如果不相同的话,那么这个时候,第一种情况就是word1串删除,也就是dp[i - 1][j] + 1,第二种情况是dp[i][j - 1] + 1的操作,第三种就是这两个都执行删除操作,然后加上2,又因为是求最小的步数嘛,所以就需要这三个最小值即可

初始化:这个初始化其实是需要在dp[i][0]初始化成i,在dp[0][j]初始化成j,因为dp[i][j]这个需要我们有初始化的值,才能往后进行推导

遍历顺序:

这个题目仍然可以通过由左到右,由上到下可以推导出来这个dp,那么遍历顺序就直接按照正常即可

返回值:这个题目返回值仍然是两个各自的字符串长度。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com