11077 最长公共子字符串(必做)
时间限制:1000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: C++;C;VC;JAVA
Description
求两个输入序列的最长的公共子字符串的长度。子字符串中的所有字符在源字符串中必须相邻。 如字符串:21232523311324和字符串312123223445,他们的最长公共子字符串为21232,长度为5。
输入格式
两行,第一行为第一个字符串X,第二行为第二个字符串Y,字符串不含空格并以回车标示结束。X和Y的串长都不超过100000。
输出格式
两行,第一行为最长的公共子字符串的长度,第二行输出一个最长的公共子字符串。 说明: (1)若最长的公共子字符串有多个,请输出在源字符串X中靠左的那个。 (2)若最长公共子字符串的长度为0,请输出空串(一个回车符)。 如输入: 21232523311324 152341231 由于523和123都是最长的公共子字符串,但123在源串X中更靠左,因此输出: 3 123
输入样例
21232523311324 312123223445
输出样例
5 21232
分析:
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;
char a[1000],b[1000]; //1000够了
int m[1000][1000];
int aa,bb;
int res=-1;
int mark;
void findL(){
for(int i=0;i<aa;i++){
for(int j=0;j<bb;j++){
if(a[i]==b[j]){
if(i==0||j==0) m[i][j]=1;
else{
m[i][j] = m[i-1][j-1]+1;
}
}else{
m[i][j]=0;
}
}
}
for(int i=aa-1;i>=0;i--){ //输出在源字符串X中靠左的那个
for(int j=0;j<bb;j++){
if(res<=m[i][j]) // 注意是小于等于
{
res = m[i][j];
mark = i;
}
}
}
}
int main()
{
freopen("in.txt","r",stdin);
cin >> a >> b;
aa=strlen(a);bb=strlen(b);
//cout << m<< n;
findL();
cout << res<< endl;
for(int i=mark-res+1;i<mark+1;i++){
cout << a[i];
}
return 0;
}
相关推荐
主要介绍了Java基于动态规划法实现求最长公共子序列及最长公共子字符串,简单描述了动态规划法的概念、原理,并结合实例形式分析了Java使用动态规划法求最长公共子序列以及最长公共子字符串相关实现技巧,需要的朋友...
最长公共子序列的算法实现,采用递归方法。
用穷举法完成了公共字符串问题, 来自百度文库,希望有帮助^^
最长公共子字符串(LCS)服务器概述构建一个简单的Web应用程序,允许用户在给定字符串列表的情况下请求最长公共子字符串。 功能要求通过HTTP POST解决最长的公共子字符串问题用户应该能够通过向服务器位于...
输入两个字符串, 求它们最长公共字串的长度
请编写一个函数,输入两个字符串,求它们的最长公共子序列,并打印出最长公共子序列。 例如:输入两个字符串BDCABA和ABCBDAB,字符串BCBA和BDAB都是是它们的最长公共子序列,则输出它们的长度4,并打印任意一个子...
求两个字符串的最长公共子序列.pdf
最长公共子字符串共有两种解决方法,下面具体说说我的思路方法一:Longest Common Substring和Longest Common Subsequence是有区别的X = <a>Y = <a>X和Y的Longest Common Sequence为,长度为4X和Y的Longest Common ...
本文实例讲述了C语言求两个字符串的最长公共子串的方法。分享给大家供大家参考。具体实现方法如下: #include "stdio.h" #include "string.h" #include "stdlib.h" void getCommon(char str1[],char str2[],char * ...
求解最大子序列、最长递增子序列、最长公共子串、最长公共子序列. http://blog.csdn.net/ssuchange/article/details/17341693
利用指针来查询两个字符串的最长公共子序列,并输出的算法。
算法工程项目问题描述: 【题目】 动态规划思维训练——最长公共子序列算法的设计与实现 给定两个序列X={X1, X2,···,Xm}和...字符串Y:{ABCBDAB},则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA
哈工大算法实验二,最长公共子序列问题,动态规划解决LCS ...3.实现三个字符串最长公共子序列的动态规划算法 4.有界面源代码和实验报告!均为自己所做,正确运行。报告中还有用Excel表分析了算法的性能
C++求最长公共子序列!实用 花费了好长时间!!
最长公共子序列问题就是给定两个序列X={x1,x2,...xm}和Y={y1,y2,...yn},找出X和Y的一个最长公共子序列。 Input 输入包含多组测试数据。第一行为一个整数C,表示有C组测试数据,接下来有C行数据,每组测试数据...
实现了求最长公共子序列的算法,内容简单易懂,代码也很短
求解任意两个字符串的最长公共子序列
自己编写的C++程序,求两个字符串的最长公共字串。例如a="abcrrrerads",b="afdabcssbcrrresswrds",则结果为bcrrre