编辑距离

编辑距离

题目描述

\(A\)\(B\) 是两个字符串。我们要用最少的字符操作次数,将字符串 \(A\) 转换为字符串 \(B\)。这里所说的字符操作共有三种:

  1. 删除一个字符;
  2. 插入一个字符;
  3. 将一个字符改为另一个字符。

\(A, B\) 均只包含小写字母。

输入格式

第一行为字符串 \(A\);第二行为字符串 \(B\);字符串 \(A, B\) 的长度均小于 \(2000\)

输出格式

只有一个正整数,为最少字符操作次数。

样例 #1

样例输入 #1

sfdqxbw
gfdgw

样例输出 #1

4

提示

对于 \(100 \%\) 的数据,\(1 \le |A|, |B| \le 2000\)

Code

#include <bits/stdc++.h>
using namespace std;
int f[3005][3005];
char a[3005],b[3005];
int main()
{
	cin >> a >> b;
	int s=strlen(a);
	int t=strlen(b);
	for(int i=1;i<=s;i++)
	{
		f[i][0]=i;
	}
	for(int i=1;i<=t;i++)
	{
		f[0][i]=i;
	}
	for(int i=1;i<=s;i++)
	{
		for(int j=1;j<=t;j++)
		{
			if(a[i-1]==b[j-1])
			{
				f[i][j]=f[i-1][j-1];
				continue;
			}
			f[i][j]=min(min(f[i-1][j],f[i][j-1]),f[i-1][j-1])+1;
		}
	}
	cout<<f[s][t];
	return 0;
}
posted @ 2023-06-03 11:48  Momo·Trace  阅读(32)  评论(0编辑  收藏  举报