dp3--codevs2598 编辑距离问题
dp3--codevs2598 编辑距离问题
一、心得
1、字符串相关问题dp的时候从0开始是个陷阱
二、题目
设A和B是2个字符串。要用最少的字符操作将字符串A转换为字符串B。这里所说的字符操作包括:
(1)删除一个字符;
(2)插入一个字符;
(3)将一个字符改为另一个字符。
将字符串A变换为字符串B所用的最少字符操作数称为字符串A到B的编辑距离,记为d(A,B)。试编写程序,对任给的2个字符串A和B,计算出它们的编辑距离d(A,B)。
输入文件edit.in有两行,第一行是字符串A,第二行是字符串B。
输出文件edit.out只有一行,即编辑距离d(A,B)。
fxpimu
xwrs
5
40%的数据字符串A、B的长度均不超过100;
100%的数据字符串A、B的长度均不超过4000。
三、分析
* 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 编辑距离问题的更多相关文章
- [LeetCode] One Edit Distance 一个编辑距离
Given two strings S and T, determine if they are both one edit distance apart. 这道题是之前那道Edit Distance ...
- C#实现Levenshtein distance最小编辑距离算法
Levenshtein distance,中文名为最小编辑距离,其目的是找出两个字符串之间需要改动多少个字符后变成一致.该算法使用了动态规划的算法策略,该问题具备最优子结构,最小编辑距离包含子最小编辑 ...
- 利用Levenshtein Distance (编辑距离)实现文档相似度计算
1.首先将word文档解压缩为zip /** * 修改后缀名 */ public static String reName(String path){ File file=new File(path) ...
- Levenshtein Distance算法(编辑距离算法)
编辑距离 编辑距离(Edit Distance),又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.许可的编辑操作包括将一个字符替换成另一个字符,插入一个字符, ...
- 编辑距离——Edit Distance
编辑距离 在计算机科学中,编辑距离是一种量化两个字符串差异程度的方法,也就是计算从一个字符串转换成另外一个字符串所需要的最少操作步骤.不同的编辑距离中定义了不同操作的集合.比较常用的莱温斯坦距离(Le ...
- 编辑距离及其动态规划算法(Java代码)
编辑距离概念描述 编辑距离,又称Levenshtein距离,是指两个字串之间,由一个转成另一个所需的最少编辑操作次数.一般情况下编辑操作包括: 将一个字符替换成另一个字符: 插入一个字符: 删除一个字 ...
- stanford NLP学习笔记3:最小编辑距离(Minimum Edit Distance)
I. 最小编辑距离的定义 最小编辑距离旨在定义两个字符串之间的相似度(word similarity).定义相似度可以用于拼写纠错,计算生物学上的序列比对,机器翻译,信息提取,语音识别等. 编辑距离就 ...
- leetcode72. Edit Distance(编辑距离)
以下为个人翻译方便理解 编辑距离问题是一个经典的动态规划问题.首先定义dp[i][j表示word1[0..i-1]到word2[0..j-1]的最小操作数(即编辑距离). 状态转换方程有两种情况:边界 ...
- 准备NOIP2017 编辑距离问题 模板
输入 第1行:字符串a(a的长度 <= 1000). 第2行:字符串b(b的长度 <= 1000). 输出 输出a和b的编辑距离 输入示例 kitten sitting 输出示例 ...
随机推荐
- 解决CSS3多列样式column-width布局时内容被截断、错乱
一.问题 使用CSS3的column-width: auto | <length>属性时,出现排列的内容被截断,出现错位的现象. 二.原因 需要为图片容器设置高度,不然会崩掉. 三.解决方 ...
- ORACLE日期时间函数
ORACLE日期时间函数大全 TO_DATE格式(以时间:2007-11-02 13:45:25为例) Year: yy two digits 两位年 ...
- VCL控件组件大都应该重载TWinControl的虚函数WndProc来进行处理窗口消息的工作
TWinControl的构造函数中会调用MakeObjectInstance并且传递MainWndProc作为窗口消息处理函数,而MainWndProc则会调用虚函数WndProc来处理窗口消息.留个 ...
- 让linux进程后台运行、会话断开不退出
方法一:nohup ping www.ibm.com & 可改变进程的父进程号方法二:setsid ping www.ibm.com 可改变进程的父进程号方法三:(ping www.ibm.c ...
- bzoj3007 解救小云公主
3007: 解救小云公主 Time Limit: 5 Sec Memory Limit: 512 MB Submit: 159 Solved: 71 [id=3007" style=&q ...
- docker daemon.json 配置
下面是自己设置的 /etc/docker/daemon.json 文件中的配置案例 [root@master docker]# cat daemon.json { "registry-mir ...
- 升级到tomcat8遇到The method getDispatcherType() is undefined for the type HttpServletRequest
今天升级到tomcat8,发现原来的项目不能运行了,遇到下面的错误:The method getDispatcherType() is undefined for the type HttpServl ...
- python学习之路-第一天-接触python
我的入门就决定用<简明Python教程> <简明Python教程> 1. python的优势 简单:专注于解决问题而不是关注语言本身 易学:容易上手 开源.免费 可移植性非常强 ...
- http,soap and rest
http://www.cnblogs.com/hyhnet/archive/2016/06/28/5624422.html http://www.cnblogs.com/bellkosmos/p/52 ...
- DEC VT100 terminal