博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
最长公共子串问题(LCS)
阅读量:5292 次
发布时间:2019-06-14

本文共 1090 字,大约阅读时间需要 3 分钟。

题目描述

希腊有一个著名的历史学家,他为了专心写一本史学巨著,而把自己关在一个高塔之上。有一天,他目睹了一场凶杀案的发生,但事后,他惊讶地发现所有围观人的证词都不一样,甚至有的完全相反。于是,他放弃了继续写作的念头。他说:“人们连发生在眼前的事实都分辨不清,我又怎么知道我写的历史是真是假呢?”
虽然历史的真假我们很难辨别,但文章是否抄袭,我们还是可以用所谓的LCS算法解决的。
给出两个字符串S1和S2,我们现在希望了解两个字符串之间的“相似度”。这个相似度是这样定义的:找出第三个字符串S3,组成S3的元素也出现在S1和S2中,而且这些元素必须是以相同的顺序出现,但不必要是连续的。能找到的S3越长则S1和S2就越相似。相似度即是这个S3的长度。例如,当S1="abcde",S2="dabfda",S3就是"abd", S1和S2的相似度就是3。

 

输入

第一行为一个整数,表示第一个字符串的长度。
第二行为第一个字符串。
第三行为一个整数,表示第二个字符串的长度。
第四行为第二个字符串。

 

输出

一个整数,即两个字符串的相似度。

 

样例输入

5abccb5acabc

 

样例输出

3
#include
#define ll long long#define met(a) memset(a,0,sizeof(a))#define inf 0x3f3f3f3fusing namespace std;const int mod=1e9+7;const int N=1010;char a[3000],b[3000];int dp[3000][3000];int main(){ ios::sync_with_stdio(false); cin.tie(0); met(dp); int i,j,k,m,n,s; cin>>m>>a+1>>n>>b+1; for(i=1; i<=m; i++) for(j=1; j<=n; j++) { if(a[i]==b[j]) dp[i][j]=dp[i-1][j-1]+1; else dp[i][j]=max(dp[i][j-1],dp[i-1][j]); } cout<
<

 

转载于:https://www.cnblogs.com/nublity/p/9417751.html

你可能感兴趣的文章
Python Web框架Django (零)
查看>>
Foxmail出现 错误信息:553 mailbox not found怎么解决
查看>>
spring_远程调用
查看>>
js 中基本数据类型和引用数据类型 ,,,, js中对象和函数的关系
查看>>
登录服务器,首先用到的5个命令
查看>>
多米诺骨牌
查看>>
区间DP 等腰三角形
查看>>
mysql 存储引擎对索引的支持
查看>>
Linq 学习(1) Group & Join--网摘
查看>>
asp.net 调用前台JS调用后台,后台掉前台JS
查看>>
【转】iOS 宏(define)与常量(const)的正确使用-- 不错
查看>>
【转】iOS开发UI篇—iPad和iPhone开发的比较
查看>>
【转】Android底层库和程序
查看>>
Comparación para 2019 Nueva Lonsdor K518S y K518ISE
查看>>
论文笔记——MobileNets(Efficient Convolutional Neural Networks for Mobile Vision Applications)
查看>>
从今天开始
查看>>
Attribute(特性)与AOP
查看>>
第三次作业
查看>>
Codeforces 962 /2错误 相间位置排列 堆模拟 X轴距离最小值 前向星点双连通分量求只存在在一个简单环中的边...
查看>>
Matrix快速幂 模板
查看>>