题意:给出两个字符串word1、word2,现有三种操作insert delete replace每次操作只能修改一个字符,求通过这三种操作把word1转变成word2的最少次数。
分析:动态规划。定义dp[i][j]表示word1的子串word1[0,i-1]转变成word2[0,j-1]的最小次数,动态转移方程为:
代码:
class Solution {
public:
int minDistance(string word1, string word2) {
int row=word1.size();
int col=word2.size();
if(row==0) return col;
if(col==0) return row;
vector<int> c(col+1);
vector<vector<int>> dp(row+1,c);
for(int i=0;i<=row;++i) dp[i][0]=i;
for(int i=0;i<=col;++i) dp[0][i]=i;
for(int i=1;i<=row;++i){
for(int j=1;j<=col;++j){
if(word1[i-1]==word2[j-1]) dp[i][j]=dp[i-1][j-1];
else dp[i][j]=min(min(dp[i-1][j],dp[i][j-1]),dp[i-1][j-1])+1;
}
}
return dp[row][col];
}
};