用c++语言实现 动态规划方法求解编辑距离问题 要求代码的输入方式 使其输入值形如字符串 ”word1 = ”horse“, word2 = ”ros“ “并完成代码任务
时间: 2024-10-13 15:15:06 浏览: 23
编辑距离C/C++实现
在C++中,动态规划通常用于求解最优化问题,例如计算两个字符串之间的编辑距离(Levenshtein distance)。这个过程涉及到创建一个二维数组,其中每个元素代表从第一个字符串到相应位置转换成第二个字符串所需的最少操作次数。以下是使用动态规划解决这个问题的示例代码:
```cpp
#include <iostream>
#include <vector>
#include <string>
int minDistance(const std::string& word1, const std::string& word2) {
int m = word1.size();
int n = word2.size();
// 初始化二维数组
std::vector<std::vector<int>> dp(m + 1, std::vector<int>(n + 1));
for (size_t i = 0; i <= m; ++i) {
dp[i][0] = i; // 第一个字符串插入字符的代价
}
for (size_t j = 0; j <= n; ++j) {
dp[0][j] = j; // 第二个字符串删除字符的代价
}
// 通过动态规划填充数组
for (size_t i = 1; i <= m; ++i) {
for (size_t j = 1; j <= n; ++j) {
if (word1[i - 1] == word2[j - 1]) {
dp[i][j] = dp[i - 1][j - 1]; // 相同字符,无需操作
} else {
dp[i][j] = 1 + std::min({dp[i - 1][j], // 删除
dp[i][j - 1], // 插入
dp[i - 1][j - 1]}); // 替换
}
}
}
return dp[m][n]; // 返回最终的编辑距离
}
int main() {
std::string word1 = "horse";
std::string word2 = "ros";
std::cout << "Minimum edit distance between \"" << word1 << "\" and \"" << word2 << "\": " << minDistance(word1, word2) << std::endl;
return 0;
}
```
在这个例子中,用户可以提供两个字符串作为输入,程序会计算它们之间的最小编辑距离。
阅读全文