解题思路
2024-05-20 22:44:51
发布于:上海
63阅读
0回复
0点赞
首先初始化一个二维数组 dp,并将所有元素设置为 0。然后,我们使用两个循环来计算 dp[i][j] 的值。如果 A 的第 i 个字符和 B 的第 j 个字符相同,我们将 dp[i][j] 设置为 dp[i - 1][j - 1],否则我们将 dp[i][j] 设置为 min(min(dp[i - 1][j] + 1, dp[i][j - 1] + 1), dp[i - 1][j - 1] + 1),即选择删除、插入或替换操作中最少的那个。最后输出 dp[m][n],即将 A 转换为 B 所需的最少字符操作次数。
#include <iostream>
#include <string>
using namespace std;
int main() {
string A, B;
cin >> A >> B;
int m = A.size(), n = B.size();
int dp[m + 1][n + 1];
for (int i = 0; i <= m; i++) {
dp[i][0] = i;
}
for (int j = 0; j <= n; j++) {
dp[0][j] = j;
}
for (int i = 1; i <= m; i++) {
for (int j = 1; j <= n; j++) {
if (A[i - 1] == B[j - 1]) {
dp[i][j] = dp[i - 1][j - 1];
} else {
dp[i][j] = min(min(dp[i - 1][j] + 1, dp[i][j - 1] + 1), dp[i - 1][j - 1] + 1);
}
}
}
cout << dp[m][n] << endl;
return 0;
}
这里空空如也
有帮助,赞一个