Leetcode | Edit Distance

原题链接:https://leetcode.com/problems/edit-distance

原题目内容如下所示:

Given two words word1 and word2, find the minimum number of steps required to convert word1 to word2. (each operation is counted as 1 step.)

You have the following 3 operations permitted on a word:

a) Insert a character
b) Delete a character
c) Replace a character

题意大概就是给定两个字符串,然后找出能够从第一个字符串转化为第二个字符串的最小操作步骤,而这道题要求总共有三种操作,插入、删除和替换。

这道题入手时最先想到的就是动态规划的方法,但一直没想到动态规划的方程,后来从字符串长度为1开始慢慢递推,就有了如下方程

这里写图片描述

以下是源代码:

class Solution {
public:
    int minDistance(string word1, string word2) {
        int e[1000][1000];
        int n = word1.length();
        int m = word2.length();
        for (int i = 1; i <= n; i++) e[i][0] = i;
        for (int j = 1; j <= m; j++) e[0][j] = j;
        for (int i = 1; i <= n; i++) {
            for (int j = 1; j <= m; j++) {
                int diff = (word1[i-1] == word2[j-1])?0:1;
                e[i][j] = min(e[i - 1][j - 1] + diff, min(e[i][j - 1] + 1, e[i - 1][j] + 1));
            }
        }
        return e[n][m];
    }
};
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值