一、实践题目

设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括:
()删除一个字符;
()插入一个字符;
()将一个字符改为另一个字符。
将字符串A变换为字符串B所用的最少字符操作数称为字符串A到 B的编辑距离,记为d(A,B)。
对于给定的字符串A和字符串B,计算其编辑距离 d(A,B)。 输入格式:
第一行是字符串A,文件的第二行是字符串B。 提示:字符串长度不超过2000个字符。 输出格式:
输出编辑距离d(A,B) 输入样例:
在这里给出一组输入。例如: fxpimu
xwrs
输出样例:
在这里给出相应的输出。例如:

二、问题描述

题目大意是:给出两个字符串 a、b,可以通过增删改三个操作将a变成b,需要进行几次操作。

三、算法描述

这道题类似于求最长公共子序列,但是还是更高级一点的。我用了res [2002][2002]来存储结果,res[i][j]表示a的子串(下标从0到i)转化为b的子串(下标从0到j)需要的操作次数,因此本题结果是res[strlen(a)][strlen(b)]。

那么问题就转化为求出res数组。

本题的res数组:

a \ b x w r s
f 2 3 4
x 1 2 3 4
p 2 2 3 4
i 3 3 3 4
m 4 4 4 4
u 5 5 5 5

1、初始化:当strlen(a)=0,res[0][j]=j;同理可得res[i][0]=i;

2、当a[i-1]=b[j-1],则res[i][j]=res[i-1][j-1],即等于左上角的元素;

3、当a[i-1]!=b[j-1],有以下三种情况:

(1)若进行删除操作:操作数加1,res[i][j]=res[i-1][j]+1;

(2)若进行增加操作:操作数加1,res[i][j]=res[i][j-1]+1;

(3)若进行替换操作:操作数加1,res[i][j]=res[i-1][j-1]+1;

  res[i][j]等于上面三种情况res[i][j]里的最小值

通过以上分析,我们可以发现填表规则是从上到下从左往右填一个大小为strlen(a)*strlen(b)的表格,两层for循环对res数组操作:匹配时取左上的值;

失配时取 左上+1,左边+1,右边+1 三个数中的最小值,更新res[i]][j];

最后递推到右下角dp[la][lb]为所求答案

代码如下:

 #include<iostream>
#include<string.h>
using namespace std;
char a[], b[];
int res [][];
int temp = ;
int main (){
cin >> a;
cin >> b;
int la = strlen (a);
int lb = strlen (b);
for(int i = ; i <= la; i++) res[i][] = i;
for(int i = ; i <= lb; i++) res[][i] = i; for(int i = ; i <= la; i++){
for(int j = ; j <= lb; j++){
if(a[i-] == b[j-]) temp = ; else temp = ;
int t = min(res[i-][j] + ,res[i][j-] + );
res[i][j] = min(t,res[i-][j-] + temp);
}
} cout << res[la][lb];
return ;
}

四、算法时间及空间复杂度分析

采用dp思想,两层for循环处理res数组,故时间复杂度为O(n^2)

五、心得体会

dp问题最重要的还是要找到问题的最优解子结构,然后建立递推关系,确定好填表的顺序。

多打题,才能提高、加深对算法的理解。

PTA 7-3 编辑距离问题 (30 分)的更多相关文章

  1. PTA 7-1 公路村村通 (30分)

    PTA 7-1 公路村村通 (30分) 现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数N ...

  2. PTA 练习 7-24 喊山 (30 分)

    7-24 喊山 (30 分) 喊山,是人双手围在嘴边成喇叭状,对着远方高山发出"喂-喂喂-喂喂喂--"的呼唤.呼唤声通过空气的传递,回荡于深谷之间,传送到人们耳中,发出约定俗成的& ...

  3. PTA 08-图7 公路村村通 (30分)

    现有村落间道路的统计数据表中,列出了有可能建设成标准公路的若干条道路的成本,求使每个村落都有公路连通所需要的最低成本. 输入格式: 输入数据包括城镇数目正整数NN(\le 1000≤1000)和候选道 ...

  4. PTA 1014 Waiting in Line (30分) 解题思路及满分代码

    题目 Suppose a bank has N windows open for service. There is a yellow line in front of the windows whi ...

  5. PTA 社交网络图中结点的“重要性”计算(30 分)

    7-12 社交网络图中结点的“重要性”计算(30 分) 在社交网络中,个人或单位(结点)之间通过某些关系(边)联系起来.他们受到这些关系的影响,这种影响可以理解为网络中相互连接的结点之间蔓延的一种相互 ...

  6. 二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历

    二叉搜索树的结构(30 分) PTA 模拟+字符串处理 二叉搜索树的节点插入和非递归遍历   二叉搜索树的结构(30 分) 二叉搜索树或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则 ...

  7. PTA 11-散列4 Hard Version (30分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/680 5-18 Hashing - Hard Version   (30分) Given ...

  8. PTA 05-树9 Huffman Codes (30分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/671 5-9 Huffman Codes   (30分) In 1953, David ...

  9. PTA 04-树6 Complete Binary Search Tree (30分)

    题目地址 https://pta.patest.cn/pta/test/16/exam/4/question/669 5-7 Complete Binary Search Tree   (30分) A ...

随机推荐

  1. Java,哈希码以及equals和==的区别

    从开始学习Java,哈希码以及equals和==的区别就一直困扰着我. 要想明白equals和==的区别首先应该了解什么是哈希码,因为在jdk的类库中不管是object实现的equals()方法还是S ...

  2. Spring Cloud Eureka 分布式开发之服务注册中心、负载均衡、声明式服务调用实现

    介绍 本示例主要介绍 Spring Cloud 系列中的 Eureka,使你能快速上手负载均衡.声明式服务.服务注册中心等 Eureka Server Eureka 是 Netflix 的子模块,它是 ...

  3. 一个Android 架构师的成长之路

    前言 总所周知,当下流行的编程语言有Java.PHP.C.C++.Python.Go等.其中,稳坐榜首的仍然是Java编程语言,且在以面向对象思想占主导的应用开发中,Java往往成为其代名词.Java ...

  4. 【Python爬虫】第四课(查询照片拍摄地址)

    首先,要能够查询到照片地址,查询的照片必须要开GPS拍,且上传时用原图…… 查询图片的exif信息,使用exifread包 import exifread img = exifread.process ...

  5. CF #579 (Div. 3) D1.Remove the Substring (easy version)

    D1.Remove the Substring (easy version) time limit per test2 seconds memory limit per test256 megabyt ...

  6. Java 代理模式 (二) 动态代理

    代理模式 代理(Proxy)是一种设计模式, 提供了对目标对象另外的访问方式:即通过代理访问目标对象. 这样好处: 可以在目标对象实现的基础上,增强额外的功能操作.(扩展目标对象的功能). 代理模式的 ...

  7. layer.open打开一个新的jsp页面,如何关闭并刷新父页面问题

    layer.open打开一个新的jsp页面弹框,如何关闭呢? 在新的页面提交完毕之后,关闭并刷新父页面列表. layer.closeAll(); parent.layer.closeAll(); wi ...

  8. svn报错Item is not readable svn解决方案

    解决: 配置目录权限时如: [/]tangtx=rwyangcx=rwweishq=rw 结果组用户分别在根目录下可以正常show log,而在其子目录中show log都会提示 Item is no ...

  9. angular 配置开发环境、测试环境、生产环境

    1. 配置开发环境.测试环境.生产环境 (1). environment.ts - 开发环境: 用于程序开发 (创建项目时自动生成) export const environment = { prod ...

  10. 03-css的继承性和层叠性

    一.继承性 css中所谓的继承,就是子集继承父级的属性. 可以继承的属性:color.font-xxx.text-xxx.line-xxx.(主要是文本级的标签元素) 但是,像一些盒子元素属性,定位的 ...