72. Edit Distance
Posted 为了更优秀的你,加油!
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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的主要内容,如果未能解决你的问题,请参考以下文章