编辑距离

题目描述

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

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

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

输入格式

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

输出格式

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

样例 #1

样例输入 #1

sfdqxbw
gfdgw

样例输出 #1

4

ACcode:

#include<bits/stdc++.h>
using namespace std;
int f[2500][2500];
char a[2500],b[2500];
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-08-27 09:43  nasia  阅读(8)  评论(0编辑  收藏  举报