Leetcode之Edit Distance 问题
来源:互联网 发布:一键抠图软件电脑 编辑:程序博客网 时间:2024/06/06 00:11
问题描述:
Given two words word1 and word2, find the minimum number of steps required to convertword1 toword2. (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
问题来源:Edit Distance (详细地址:https://leetcode.com/problems/edit-distance/description/)
思路分析:这道题和前面的Delete Operation for Two Strings (删除相应的字符串找到最长公共序列),Distinct Subsequences (删除相应的字符串得到另外一个指定的字符串),而这道题又是不一样的意思,这道题也是将word1转变为word2,但是我们不仅限于删除操作了,现在可以是插入.删除和替换操作。应该可以说是由Distinct Subsequesces 问题演变而来的,而这道题和那道题的解题思路和解题步骤也是近似的。那我们也按照那个思路来解:
1.)首先也需要申请两个数组,也需要两个指针i和j,分别指向两个字符串。接着考虑初始化操作,在这初始化第一行和第一列,即其中一个为空字符串,考虑最少步数那就直接删除就好了,有多长就删除多少步,即:distance[i][0] = i;和distance[0][j] = j。第一个是word2为空字符串,第二个表示的是word1为空字符串所需要删除的最少步数。所以,初始化操作就到此结束了。
2.)下面我们看看状态转移方程,也分为当前字符相等和不想等两种情况,同时我们控制住j指向的字符串是不变的。先考虑简单点的,如果当前的字符是相等的,那简单,直接不需要多余的步骤,直接就等于之前所需要步数,即distance[i][j] = distance[i - 1][j - 1];那要是不相等呢?我们就考虑通过一定的手段让它们是相等的,这个时候,题目给出的三种操作都可以拿出来分析了:
a.)插入一个字符:当前的第i个字符和第j个字符已经是不相等的,所以我们插入一个新的字符来满足使得该字符和j指向的字符相等,即i指向的字符和j-1指向的字符匹配,所以我们需要操作的步数满足:distance[i][j] = distance[i][j - 1] + 1;
b.)删除一个字符:当前的第i个字符和第j个字符已经是不相等的,所以我们删除掉该字符来满足使得删除掉的字符和j指向的字符相等,即:distance[i][j] = distance[i - 1][j] + 1;
c.)替换掉一个字符:目前的字符是不匹配的,我们通过替换使得它们相等,也就是说distance[i][j] = distance[i - 1][j - 1] + 1。
然而,这道题考虑的是最少的步数,所以我们得取这三种操作中最小值,即:
distance[i][j] = Integer.min(Integer.min(distance[i - 1][j], distance[i][j - 1]),
distance[i - 1][j - 1]) + 1;
代码:
初始化部分:
状态转移部分:
- Leetcode之Edit Distance 问题
- leetcode之Edit Distance
- LeetCode 之 Edit Distance
- leetcode之Edit Distance
- LeetCode 之Edit Distance
- [LeetCode] DP 之 Edit Distance
- LeetCode: Edit Distance
- LeetCode Edit Distance
- LeetCode: Edit Distance
- [Leetcode] Edit Distance
- leetcode 19: Edit Distance
- [LeetCode] Edit Distance
- [Leetcode] Edit Distance
- LeetCode Edit Distance
- [LeetCode] Edit Distance
- [LeetCode]Edit Distance
- Leetcode: Edit Distance
- [leetcode]Edit Distance
- Windows 7下通过anaconda安装tensorflow
- .NET快速信息化系统开发框架 V3.2 -> Web 用户管理模块编辑界面-组织机构选择支持级联选择
- 2017idea的激活方法
- 浅谈常见的target=_blank
- 设计一个学生类Student
- Leetcode之Edit Distance 问题
- 大数据学习21:sqoop 语法和常用命令和小案例
- app图标有黑边(无法完全填充)的问题
- 分布式跟踪系统(一):Zipkin的背景和设计
- HashMap的工作原理
- 我的CSDN起点
- fopen多次打开同一个文件
- 正则表达式大全
- CentOS Oracle客户端安装方法