dp3--codevs2598 编辑距离问题

一、心得

1、字符串相关问题dp的时候从0开始是个陷阱

二、题目

2598 编辑距离问题

 时间限制: 1 s
 空间限制: 128000 KB
 题目等级 : 钻石 Diamond
 
 
 
题目描述 Description

设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括:

(1)删除一个字符;

(2)插入一个字符;

(3)将一个字符改为另一个字符。

将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。试编写程序,对任给的2个字符串A和B,计算出它们的编辑距离d(A,B)。

输入描述 Input Description

输入文件edit.in有两行,第一行是字符串A,第二行是字符串B。

输出描述 Output Description

输出文件edit.out只有一行,即编辑距离d(A,B)。

样例输入 Sample Input

fxpimu

xwrs

样例输出 Sample Output

5

数据范围及提示 Data Size & Hint

40%的数据字符串A、B的长度均不超过100;

100%的数据字符串A、B的长度均不超过4000。

分类标签 Tags 点此展开

 

三、分析

* codeVs2598编辑距离.cpp
* 分析:
* 状态:
* f[i][j]表示串s1的前i个字符和串s2的前j个字符的编辑距离
* 最终状态:
* f[len_s1][len_s2]
* 初始状态:
* f[i][0]=i;f[0][j]=j
* 状态转移方程:
* f[i][j]=f[i-1][j-1]; (s1[i]==s2[j])
* f[i][j]=min(f[i-1][j-1],f[i-1][j],f[i][j-1])+1; (s1[i]!=s2[j])

上图为初始化及分析过程

上图为dp数组结果

四、AC代码

94ms

 /*
* codeVs2598编辑距离.cpp
* 分析:
* 状态:
* f[i][j]表示串s1的前i个字符和串s2的前j个字符的编辑距离
* 最终状态:
* f[len_s1][len_s2]
* 初始状态:
* f[i][0]=i;f[0][j]=j
* 状态转移方程:
* f[i][j]=f[i-1][j-1]; (s1[i]==s2[j])
* f[i][j]=min(f[i-1][j-1],f[i-1][j],f[i][j-1])+1; (s1[i]!=s2[j])
*
*/ #include <iostream>
#include <string>
#include <cstdio>
using namespace std;
string s1, s2;
int f[][];
int len_s1, len_s2; void readData() {
cin >> s1 >> s2;
} void printRead() {
cout << s1 << endl << s2 << endl;
} void initLen() {
len_s1 = s1.length();
len_s2 = s2.length();
} void printLen() {
cout << len_s1 << endl << len_s2 << endl;
} void initArr_f() {
//f数组最初的初始化
for (int i = ; i <= len_s1; i++) {
for (int j = ; j <= len_s2; j++) {
f[i][j] = 0xfffff;
}
}
//0列
for (int i = ; i <= len_s1; i++) {
f[i][] = i;
}
//0行
for (int j = ; j <= len_s2; j++) {
f[][j] = j;
}
} void printArr_f() {
for (int i = ; i <= len_s1; i++) {
for (int j = ; j <= len_s2; j++) {
printf("%8d ", f[i][j]);
}
cout << endl;
}
} void init() {
readData();
//printRead();
initLen();
//printLen();
initArr_f();
//printArr_f();
} int min3(int a,int b,int c){
return min(min(a,b),c);
} void dp() {
for (int i = ; i <= len_s1; i++) {
for (int j = ; j <= len_s2; j++) {
if(s1[i-]==s2[j-]) f[i][j]=f[i-][j-];
else{
f[i][j]=min3(f[i-][j-],f[i-][j],f[i][j-])+;
}
}
}
} void printAns(){
cout<<f[len_s1][len_s2]<<endl;
} int main() {
//freopen("src/codeVs2598in.txt", "r", stdin);
init();
dp();
//printArr_f();
printAns();
return ;
}
/*
* 注意点:
* 1、f数组最初的初始化不能忘记
* f[i][j] = 0xfffff;
* 2、if(s1[i-1]==s2[j-1])这里忘记写减1了
* 字符串从0开始
*/

五、注意点

1、f数组最初的初始化不能忘记
  f[i][j] = 0xfffff;

2、if(s1[i-1]==s2[j-1])这里忘记写减1了
  字符串从0开始

dp3--codevs2598 编辑距离问题的更多相关文章

  1. [LeetCode] One Edit Distance 一个编辑距离

    Given two strings S and T, determine if they are both one edit distance apart. 这道题是之前那道Edit Distance ...

  2. C#实现Levenshtein distance最小编辑距离算法

    Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑 ...

  3. 利用Levenshtein Distance (编辑距离)实现文档相似度计算

    1.首先将word文档解压缩为zip /** * 修改后缀名 */ public static String reName(String path){ File file=new File(path) ...

  4. Levenshtein Distance算法(编辑距离算法)

    编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符, ...

  5. 编辑距离——Edit Distance

    编辑距离 在计算机科学中,编辑距离是一种量化两个字符串差异程度的方法,也就是计算从一个字符串转换成另外一个字符串所需要的最少操作步骤.不同的编辑距离中定义了不同操作的集合.比较常用的莱温斯坦距离(Le ...

  6. 编辑距离及其动态规划算法(Java代码)

    编辑距离概念描述 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.一般情况下编辑操作包括: 将一个字符替换成另一个字符: 插入一个字符: 删除一个字 ...

  7. stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)

    I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...

  8. leetcode72. Edit Distance(编辑距离)

    以下为个人翻译方便理解 编辑距离问题是一个经典的动态规划问题.首先定义dp[i][j表示word1[0..i-1]到word2[0..j-1]的最小操作数(即编辑距离). 状态转换方程有两种情况:边界 ...

  9. 准备NOIP2017 编辑距离问题 模板

    输入 第1行:字符串a(a的长度 <= 1000). 第2行:字符串b(b的长度 <= 1000). 输出   输出a和b的编辑距离   输入示例 kitten sitting 输出示例 ...

随机推荐

  1. 字符串 转 时间戳 unix_timestamp('2018-07-01 0:0:0')

    SELECT FROM_UNIXTIME(createtime,'%Y%m%d') AS d, s.app,SUM(o.val) FROM orders o LEFT JOIN app_type s ...

  2. SOE 部署错误 ClassFactory cannot supply requested class

    问题描述: 部署完SOE,对某个服务启用部署的SOE时,出现错误信息,假如对地图服务SampleWorldCities启用刚部署的SOE,错误信息如下: service failed to start ...

  3. python模块学习(二)

    configparser模块 软件常见文档格式如下: [DEFAULT]ServerAliveInterval = 45Compression = yesCompressionLevel = 9For ...

  4. git原理:提交原理

    当运行git add  git commit的时候,git底层都做了什么? 这里涉及到的底层命令:git hash-object 讲对象写入到git object中git update-index   ...

  5. 使用nose_parameterized使unitTest实现参数化

    nose-parameterized是一个针对Python单元测试框架实现参数化的扩展 import unittest # from nose_parameterized import paramet ...

  6. git发布代码到github

    git是什么? 1.git主要是用于对版本进行管理的一个系统. 2.时刻保持数据完整性:SHA-1计算 3.文件的三种状态 已提交,已修改,已暂存 对应文件流转的三个工作区域:本地仓库,Git的工作目 ...

  7. Get Region Information from IP Address with Taobao API

    通过淘宝的API "http://ip.taobao.com/service/getIpInfo.php?ip=*.*.*.*" 来获得你要查询的IP地址的国家,地区,城市,ISP ...

  8. XSS - 禁止浏览器读取Cookie - HttpOnly

    1.什么是HttpOnly? 如果您在cookie中设置了HttpOnly属性,那么通过js脚本将无法读取到cookie信息,这样能有效的防止XSS攻击,具体一点的介绍请google进行搜索.   C ...

  9. Js onload 解析

    Js onload的使用方法. 1.在script中调用 window.onload = function(){ function1(); function2(); function3(); }; 或 ...

  10. Centos(Yum源更改)

    第一步:备份你的原镜像文件,以免出错后可以恢复. [root@openstack yum.repos.d]#mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum. ...