题意:给出两个字符串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];
}
};
动态规划解决字符串转换问题
本文探讨使用动态规划方法解决将一个字符串转换为另一个字符串所需的最少操作次数问题,包括插入、删除和替换三种操作。
452

被折叠的 条评论
为什么被折叠?



