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
分析:本题用
动态规划的思想解答。用二维数组p[i][[j]表示word1[1...i]变为word2[1...j]需要经过最少的步数。若已知p[i][j]要p[i+1][j+1]对应3种操作,有三种转化方式
1. 修改一个字符。
当word1[i+1] != word2[j+1]时,需要修改字符,而word1[1…i]变换到word2[1...j]已经求得为p[i][j], 因此修改字符时,p[i+1][j+1] = p[i][j] + (word1[i+1] == word2[j+1]? 0:1)
2. 插入一个字符。
插入一个字符是在将word1[1...i+1]变换到word2[1...j]的基础上,插入一个字符使得word1[1...i+1]变换到word2[1....j+1],因此p[i+1][j+1] = p[i+1][j]+1;
3. 删除一个字符
需要删除时,说明字符word1[i+1]是多余的,删除后的字符串结果与将word1[1...i]变换到word2[1...j+1]相同,只是多了一步操作。因此p[i+1][j+1] = p[i][j+1]+1
p[i+1][j+1]取这三种变换的最小值。
所以
p[i][j] = min(p[i-1][j-1] +(word1[i] == word2[j] ? 0 :1), min(p[i][j-1] +1, p[i-1][j] +1) )
初始化:
p[0][j] 表示将空字符串转化成word2[1...j],因此 p[0][j] = j
p[i][0] 表示将word1[1…i]转化成空字符串,因此p[i][0] = i
算法复杂度O(mn)
代码:
public class Edit_Distance {
public int minDistance(String word1, String word2) {
int p[][] = new int[word1.length()+1][word2.length()+1];
for(int i=0;i<p[0].length;++i)
p[0][i] = i;
for(int i=0;i<p.length;++i)
p[i][0] = i;
for(int i=1;i<=word1.length();++i){
for(int j=1;j<=word2.length();++j){
p[i][j] = Math.min(p[i][j-1]+1, Math.min(p[i-1][j]+1, p[i-1][j-1]+(word1.charAt(i-1)== word2.charAt(j-1)? 0: 1)));
}
}
return p[word1.length()][word2.length()];
}
}
分享到:
相关推荐
java java_leetcode题解之Hamming Distance.java
LeetCode题解(java语言实现) 本资源提供了LeetCode题解的Java语言实现,涵盖了多种算法和数据结构,包括数组、链表、树、图、动态规划、贪心算法等。该资源共包含71个LeetCode题解,涵盖了多个难度级别的题目,...
LeetCode book——CleanCodeHandbook_v1.0.1
leetcode题解代码,先使用C++解题,后续学习其它语言也使用leetcode来快速学习.leetcode题解代码,先使用C++解题,后续学习其它语言也使用leetcode来快速学习.leetcode题解代码,先使用C++解题,后续学习其它语言也...
python python_leetcode题解之072_Edit_Distance
《LeetCode题解》是广大程序员提升算法能力和解决实际编程问题的重要资源库。它涵盖了大量来自LeetCode在线编程挑战平台的题目,旨在帮助开发者提升在算法、数据结构以及问题解决能力上的技能。LeetCode题解通常包括...
java java_leetcode题解之Distance Between Bus Stops.java
c c语言_leetcode题解之0072_edit_distance.zip
java基础 java_leetcode题解之All Nodes Distance K in Binary Tree.java
javascript js_leetcode题解之第72-edit-distance.js
Leetcode 题解 Leetcode 题解.pdf 文档提供了多个算法思想和 Leetcode 题目的解决方案,涵盖了双指针、数组遍历、字符串处理等多个方面。下面是对文档中所涉及的知识点的详细讲解: 一、双指针思想 双指针是一种...
python python_leetcode题解之161_One_Edit_Distance.py
javascript js_leetcode题解之161-one-edit-distance.js
c语言入门 c语言_leetcode题解461-hamming-distance.c
分享 技术面试必备基础知识、Leetcode 题解、Java、C++、Python、后端面试、操作系统、计算机网络、系统设计分享 技术面试必备基础知识、Leetcode 题解、Java、C++、Python、后端面试、操作系统、计算机网络、系统...
python python_leetcode题解之046全排列
python python_leetcode题解之061旋转链表
python python_leetcode题解之055跳跃游戏
python python_leetcode题解之051N皇后
python python_leetcode题解之047全排列II