最优解
2025-01-08 20:35:18
发布于:北京
1阅读
0回复
0点赞
#include <iostream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
int main() {
string a, b;
cin >> a >> b;
int al = a.size(), bl = b.size();
vector<vector<int>> dp(2, vector<int>(bl + 1, 0));
// 初始化边界条件
for (int j = 0; j <= bl; ++j) {
dp[0][j] = j;
}
// 动态规划填表
for (int i = 1; i <= al; ++i) {
dp[i % 2][0] = i;
for (int j = 1; j <= bl; ++j) {
if (a[i - 1] == b[j - 1]) {
dp[i % 2][j] = dp[(i - 1) % 2][j - 1];
} else {
dp[i % 2][j] = min({
dp[(i - 1) % 2][j] + 1, // 删除
dp[i % 2][j - 1] + 1, // 插入
dp[(i - 1) % 2][j - 1] + 1 // 修改
});
}
}
}
// 输出结果
cout << dp[al % 2][bl] << endl;
return 0;
}
这里空空如也
有帮助,赞一个