栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

Acwing--902. 最短编辑距离(线性dp)

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Acwing--902. 最短编辑距离(线性dp)

给定两个字符串 AA 和 BB,现在要将 AA 经过若干操作变为 BB,可进行的操作有:

  1. 删除–将字符串 AA 中的某个字符删除。
  2. 插入–在字符串 AA 的某个位置插入某个字符。
  3. 替换–将字符串 AA 中的某个字符替换为另一个字符。

现在请你求出,将 AA 变为 BB 至少需要进行多少次操作。

输入格式

第一行包含整数 nn,表示字符串 AA 的长度。

第二行包含一个长度为 nn 的字符串 AA。

第三行包含整数 mm,表示字符串 BB 的长度。

第四行包含一个长度为 mm 的字符串 BB。

字符串中均只包含大写字母。

输出格式

输出一个整数,表示最少操作次数。

数据范围

1≤n,m≤10001≤n,m≤1000

输入样例:

10 
AGTCTGACGC
11 
AGTAAGTAGGC

输出样例:

4

 y总tql拾拾

#include
using namespace std;
const int N=1010;
char a[N],b[N];
int f[N][N];

int main()
{
    int n,m;
    cin>>n>>a+1;
    cin>>m>>b+1;
    
    
    //初始化边界
    for(int i=0;i<=n;i++)
    f[i][0]=i;
    for(int j=0;j<=m;j++)
    f[0][j]=j;//a的前0个字母和b的前j个字母匹配最小需要的操作步数
    
    for(int i=1;i<=n;i++)
    {
        for(int j=1;j<=m;j++)
        {
            f[i][j]=min(f[i-1][j]+1,f[i][j-1]+1);//删除,添加
            if(a[i]==b[j])//更改
            {
                f[i][j]=min(f[i][j],f[i-1][j-1]);
            }
            else
            {
                f[i][j]=min(f[i][j],f[i-1][j-1]+1);
            }
        }
    }
    cout< 

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/676626.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号