【Leetcode】72. Edit Distance
来源:互联网 发布:iphone打不开蜂窝数据 编辑:程序博客网 时间:2024/05/17 13:43
Description:
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
思路
本题可以用动态规划来解决。首先,目标是找到两个单词之间的最小编辑距离,编辑操作包括增、删、改三种,那么可以建立一个目标函数E(i,j),用来表示word1和word2两者分别到i位置和j位置的之前所有字符所需的编辑距离,也就是一种累加的过程。这意味着E(i,j)的值会受前一个状态的影响。具体来说,当word1比word2长时,需要做删除操作,word1比word2短时,需要做插入操作,而当word1与word2同长,其操作数由当前位置两字符的相等于否决定,即若相同则操作数为0,不同操作数为1。那么状态转移方程可以写成:
E(i,j) = min{E(i-1,j)+1, E(i,j-1)+1, E(i-1,j-1)+diff(i,j)}
另外值得注意的是,E(0,0)意味着字符长度为0时的编辑距离,其值应为0。最后结果返回E最后的值即可。
以下是使用C++的实现过程:
class Solution {public: int minDistance(string word1, string word2) { int m = word1.length()+1; int n = word2.length()+1; int E[m][n]; int diff[m][n]; for(int i=0;i<m;i++){ E[i][0] = i; } for(int j=0;j<n;j++){ E[0][j] = j; } for(int i=1;i<m;i++){ for(int j=1;j<n;j++){ if(word1[i-1]==word2[j-1]) diff[i][j] = 0; else diff[i][j] = 1; E[i][j] = min(1+E[i][j-1],E[i-1][j]+1); E[i][j] = min(E[i][j],E[i-1][j-1]+diff[i][j]); } } return E[m-1][n-1]; }};
0 0
- LeetCode 72. Edit Distance
- [LeetCode]72.Edit Distance
- LeetCode --- 72. Edit Distance
- [Leetcode] 72. Edit Distance
- [leetcode] 72.Edit Distance
- [leetcode] 72.Edit Distance
- Leetcode 72. Edit Distance
- LeetCode 72. Edit Distance
- leetcode 72. Edit Distance
- LeetCode 72. Edit Distance
- Leetcode 72. Edit Distance
- Leetcode:72. Edit Distance
- 【LeetCode】72. Edit Distance
- leetCode 72. Edit Distance
- [leetcode] 72. Edit Distance
- [LeetCode] 72. Edit Distance
- leetcode 72. Edit Distance
- leetcode 72. Edit Distance
- Oracle11g创建、连接数据库的注意事项
- thinkphp3.2.3动态切换多数据库
- Matlab:指针的使用方法
- 微信开发--验证服务器的有效性签名工具类
- 常用数据格式xml和json解析
- 【Leetcode】72. Edit Distance
- c++工程调用python语言与lua语言
- ImageLoader的一个工具类
- Activity has leaked window that was originally added
- jsonp
- 设置页面水印效果
- linux里的ls命令详解
- kafka学习笔记:知识点整理
- Export from a DLL Using __declspec(dllexport)