作业介绍

#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 小时