首页 > 代码库 > 72. Edit Distance
72. 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
解题思路:经典dp题。用dp[i][j]表示word1[0...i]与word2[0...j]的最小编辑距离。
把word1和word2相关字符对齐后,只要看最后一位是否一样即可
1.word1为空,word2为空,此时无意义
2.word1为空,word2不为空,word1需要插入操作 //dp[i][j]=dp[i][j-1]+1
3.word1不为空,word2为空,word1需要删除操作 //dp[i][j]=dp[i-1][j]+1
4.word1不为空,word2不为空,如果word1==word2,此时不操作,否则把word1修改为word2 //dp[i][j]=word1==word2?dp[i-1][j-1]:dp[i-1][j-1]+1
class Solution { public: int minDistance(string word1, string word2) { //dp[i][j] means s[0...i] to t[0...j] int n=word1.length(),m=word2.length(); int dp[n+1][m+1]; for(int i=0;i<=n;i++) dp[i][0]=i; for(int i=0;i<=m;i++) dp[0][i]=i; for(int i=1;i<=n;i++) for(int j=1;j<=m;j++){ if(word1[i-1]==word2[j-1]){ dp[i][j]=dp[i-1][j-1]; } else { dp[i][j]=1+min(dp[i-1][j-1],min(dp[i-1][j],dp[i][j-1])); } } return dp[n][m]; } };
72. Edit Distance
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。