编辑距离(二维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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· 单线程的Redis速度为什么快?
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 展开说说关于C#中ORM框架的用法!