编辑距离
编辑距离
题目描述
设 \(A\) 和 \(B\) 是两个字符串。我们要用最少的字符操作次数,将字符串 \(A\) 转换为字符串 \(B\)。这里所说的字符操作共有三种:
- 删除一个字符;
- 插入一个字符;
- 将一个字符改为另一个字符。
\(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;
}
本文来自小默的博客,转载请注明原文链接:https://www.cnblogs.com/momotrace/p/p2758.html