ARTICLE DETAIL

资讯详情

深耕网站建设、视觉设计与SEO优化的一线实战洞察。

洛谷 P2758 编辑距离

洛谷 P2758 编辑距离

题目描述

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

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

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

输入格式

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

输出格式

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

输入输出样例

输入 #1复制

sfdqxbw gfdgw

输出 #1复制

4

说明/提示

对于 100% 的数据,1≤∣A∣,∣B∣≤2000。

#include<bits/stdc++.h> using namespace std; string a,b; const int N=2010; int f[N][N]; int main() { cin>>a>>b; int n=a.size(),m=b.size(); a=" "+a; b=" "+b; //初始化 for(int i=1;i<=n;i++) f[i][0]=i; for(int j=1;j<=m;j++) f[0][j]=j; for(int i=1;i<=n;i++) { for(int j=1;j<=m;j++) { if(a[i]==b[j]) { f[i][j]=f[i-1][j-1]; }else{ f[i][j]=min(min(f[i-1][j],f[i-1][j-1]),f[i][j-1])+1; } } } cout<<f[n][m]<<endl; }
返回列表