11077 最长公共子字符串
来源:互联网 发布:网络招生代理 编辑:程序博客网 时间:2024/06/11 06:45
11077 最长公共子字符串(必做)
时间限制:1000MS 内存限制:65535K
提交次数:0 通过次数:0
题型: 编程题 语言: C++;C;VC;JAVA
Description
求两个输入序列的最长的公共子字符串的长度。子字符串中的所有字符在源字符串中必须相邻。如字符串:21232523311324和字符串312123223445,他们的最长公共子字符串为21232,长度为5。
输入格式
两行,第一行为第一个字符串X,第二行为第二个字符串Y,字符串不含空格并以回车标示结束。X和Y的串长都不超过100000。
输出格式
两行,第一行为最长的公共子字符串的长度,第二行输出一个最长的公共子字符串。说明:(1)若最长的公共子字符串有多个,请输出在源字符串X中靠左的那个。(2)若最长公共子字符串的长度为0,请输出空串(一个回车符)。如输入:21232523311324152341231由于523和123都是最长的公共子字符串,但123在源串X中更靠左,因此输出:3123
输入样例
21232523311324312123223445
输出样例
521232
分析:
#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;
}
- 11077 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串
- 最长公共子字符串问题
- 寻找最长公共子字符串
- 最长公共子串,字符串
- 最长公共子字序列和最长公共子字符串
- 最长公共子序列以及最长公共子字符串
- 两字符串求最长公共子字符串
- 17085 工作分配问题
- 11089 多机最佳调度
- 8603 子集和问题
- 11079 可以移动的石子合并
- 8602 区间相交问题
- 11077 最长公共子字符串
- CSDN的博客积分规则及博客排名规则
- 欢迎使用CSDN-markdown编辑器
- C/C++ 类型自动转换规则
- 10303 数字三角
- Android-adapter的用法
- mysql简单备份与恢复
- 动态规划之01背包问题(最易理解的讲解)
- C查看分配给用户的内存及分配给系统的内存大小