前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >LeetCode 编辑距离 II(DP)

LeetCode 编辑距离 II(DP)

作者头像
Michael阿明
发布2021-09-06 10:21:29
6020
发布2021-09-06 10:21:29
举报
文章被收录于专栏:Michael阿明学习之路

1. 题目

给你两个单词 s 和 t,请你计算出将 s 转换成 t 所使用的最少操作数。

你可以对一个单词进行如下两种操作:

  • 删除一个字符
  • 替换一个字符

注意: 不允许插入操作 题目保证有解

代码语言:javascript
复制
示例:
输入:s = "abcdefg", t = "abdde"
输出:3

提示:
1 <= len(s), len(t) <= 200

作者:力扣 (LeetCode) 链接:https://leetcode-cn.com/leetbook/read/high-frequency-algorithm-exercise/omxcgt/ 来源:力扣(LeetCode) 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

2. 解题

类似题目:LeetCode 72. 编辑距离(DP)

  • 注意不能插入字符
代码语言:javascript
复制
class Solution {
public:
    int edit_distance(string s, string t) {
        int n1 = s.size(), n2 = t.size();
        vector<vector<int>> dp(n1+1, vector<int>(n2+1, INT_MAX));
        for(int i = 0; i <= n1; ++i)
            dp[i][0] = i;//i个s字符变成0个t字符,需要删除次数
        for(int i = 0; i <= n2; ++i)
            dp[0][i] = i;
        for(int i = 1; i <= n1; ++i)
        {
            for(int j = 1; j <= n2; ++j)
            {
                if(s[i-1] == t[j-1])
                    dp[i][j] = dp[i-1][j-1];
                else
                {
                    dp[i][j] =  dp[i-1][j-1]+1;//替换s或t的字符
                    if(i-1 >= j)//因为不能插入字符,删除 s 的 i 字符,前提是 s 字符串长度不能短于 t, 否则没有意义
                        dp[i][j] = min(dp[i][j], dp[i-1][j]+1);
                    if(j-1 >= i)//因为不能插入字符,删除 t 的 j 字符,前提是 t 字符串长度不能短于 s, 否则没有意义
                        dp[i][j] = min(dp[i][j], dp[i][j-1]+1);
                }
            }
        }
        return dp[n1][n2];
    }
};

36 ms 13.2MB C++

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2021/03/23 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1. 题目
  • 2. 解题
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档