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]; } };
时间: 2024-12-23 17:20:13