作业介绍
#include<bits/stdc++.h> // 包含几乎所有标准库
using namespace std;
string a,b; // 定义两个字符串a和b
int dp[2005][2005]; // 定义一个二维数组dp,用于存储编辑距离的动态规划结果
int main(){
cin>>a>>b; // 从标准输入读取两个字符串a和b
// 初始化dp数组的第一行和第一列
// dp[i][0]表示将a的前i个字符转换为空字符串所需的最小编辑距离
// 也就是删除a的前i个字符,因此dp[i][0] = i
for(int i=1;i<=(int)a.size();i++){
dp[i][0]=i;
}
// 类似地,dp[0][j]表示将b的前j个字符转换为空字符串所需的最小编辑距离
// 也就是删除b的前j个字符,因此dp[0][j] = j
for(int i=1;i<=(int)b.size();i++){
dp[0][i]=i;
}
// 使用双重循环填充dp数组的其余部分
// i和j分别表示a和b的当前字符索引(从1开始,因为0已经被初始化了)
for(int i=1;i<=(int)a.size();i++){
for(int j=1;j<=(int)b.size();j++){
// 如果a和b的当前字符相同,则不需要任何编辑操作
// 因此dp[i][j]等于dp[i-1][j-1](即上一个字符对的最小编辑距离)
if (a[i-1]==b[j-1]){
dp[i][j]=dp[i-1][j-1];
}else{
// 如果a和b的当前字符不同,则考虑三种编辑操作:替换、删除、插入
// 取这三种操作所需编辑距离的最小值,并加1(因为进行了一次编辑操作)
dp[i][j]=min(min(dp[i-1][j-1],dp[i-1][j]),dp[i][j-1])+1;
}
}
}
// 输出将a转换为b所需的最小编辑距离
cout<<dp[a.size()][b.size()];
return 0;
}
- 状态
- 已结束
- 题目
- 5
- 开始时间
- 2024-11-30 0:00
- 截止时间
- 2024-12-8 23:59
- 可延期
- 24 小时