给定两个字符串 word1 和 word2,请返回将 word1 转换成 word2 所使用的最少操作数。
你可以对一个单词进行如下三种操作:
-
插入一个字符
-
删除一个字符
-
替换一个字符
输入描述
第一行输入字符串 word1。
第二行输入字符串 word2。
输出描述
输出最少操作数。
示例 1
输入
text
horse
ros
输出
text
3
说明
horse -> rorse(替换 h 为 r)
rorse -> rose(删除 r)
rose -> ros(删除 e)
共 3 步。
C++ 解法
cpp
#include <bits/stdc++.h>
using namespace std;
int main() {
string a, b;
cin >> a >> b;
int n = a.size(), m = b.size();
vector<vector<int>> dp(n + 1, vector<int>(m + 1, 0));
for (int i = 0; i <= n; i++) dp[i][0] = i;
for (int j = 0; j <= m; j++) dp[0][j] = j;
for (int i = 1; i <= n; i++) {
for (int j = 1; j <= m; j++) {
if (a[i - 1] == b[j - 1]) {
dp[i][j] = dp[i - 1][j - 1];
} else {
dp[i][j] = 1 + min({dp[i - 1][j], dp[i][j - 1], dp[i - 1][j - 1]});
}
}
}
cout << dp[n][m] << endl;
return 0;
}