编辑距离(二维dp)

题目链接:https://www.luogu.com.cn/problem/P2758

题意:

给定两个字符串a,b。
有三种操作:删除,插入,替换
求a到b的最小编辑距离

思路:

设dp数组dp[i][j]表示字符串a:0i-1子串到字符串b:0j-1子串的编辑距离
如果a[i-1]=b[j-1],不需要操作,直接从dp[i-1][j-1]转移
反之,删除a[i]:dp[i-1][j]+1.插入a[i]:dp[i][j-1]+1.替换:dp[i-1][j-1]+1,取min

#include<bits/stdc++.h>
#define rep(i,a,n) for(int i=a;i<=n;i++)
#define pb push_back
#define endl "\n"
#define fi first
#define se second
//#pragma GCC optimize(3)
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
const int inf=0x3f3f3f3f;
const ll llmax=LLONG_MAX;
const int maxn=1e5+5;
const int mod=1e9+7;

int dp[3000][3000];

signed main()
{
	ios::sync_with_stdio(false),cin.tie(0);
	string a,b;cin>>a>>b;
	int lena=a.size();
	int lenb=b.size();
	for(int i=0;i<=lenb;i++)dp[0][i]=i;
	for(int i=0;i<=lena;i++)dp[i][0]=i;
	for(int i=1;i<=lena;i++){
		for(int j=1;j<=lenb;j++){
			if(a[i-1]==b[j-1])dp[i][j]=dp[i-1][j-1];
			else dp[i][j]=min(dp[i-1][j],min(dp[i][j-1],dp[i-1][j-1]))+1;
		}
	}
	cout<<dp[lena][lenb];
	return 0;
}


posted @   Marinaco  阅读(3)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!
点击右上角即可分享
微信分享提示