11077 最长公共子字符串
时间限制:1000MS 内存限制:65535K 提交次数:0 通过次数:0
语言: not limited
描述
求两个输入序列的最长的公共子字符串的长度。子字符串中的所有字符在源字符串中必须相邻。
如字符串:21232523311324和字符串312123223445,他们的最长公共子字符串为21232,长度为5。
输入格式
两行,第一行为第一个字符串X,第二行为第二个字符串Y,字符串不含空格并以回车标示结束。X和Y的串长都不超过100000。
输出格式
两行,第一行为最长的公共子字符串的长度,第二行输出一个最长的公共子字符串。
说明:
(1)若最长的公共子字符串有多个,请输出在源字符串X中靠左的那个。
(2)若最长公共子字符串的长度为0,请输出空串(一个回车符)。
如输入:
21232523311324
152341231
由于523和123都是最长的公共子字符串,但123在源串X中更靠左,因此输出:
3
123
17
输入样例
21232523311324
312123223445
输出样例
5
21232
18
------------------------------------------------------
11077最长公共子字符串(动态规划)
#include<stdio.h>
#include<malloc.h>
#include<string.h>
intLCSLength(intm,intn,char*x,char*y,int**&f,int&besti,int&bestj,int&max)
{
inti,j;
for(i=0;i<m;i++){if(x[i]==y[0]){f[i][0]=1;max=f[i][0];besti=i;bestj=0;}elsef[i][0]=0;}
for(i=0;i<n;i++){if(x[0]==y[i]){f[0][i]=1;max=f[0][i];besti=0;bestj=i;}elsef[0][i]=0;}
for(i=1;i<m;i++)
for(j=1;j<n;j++){
if(x[i]==y[j]){
f[i][j]=f[i-1][j-1]+1;
if(max<f[i][j]){max=f[i][j];besti=i;bestj=j;}
}
elsef[i][j]=0;
}
return0;
}
intmain()
{
charstr1[100000],str2[100000];
intm,n,bi=0,bj=0,**c,i,max=0;
scanf("%s%s",str1,str2);
m=strlen(str1);n=strlen(str2);
c=(int**)malloc(m*sizeof(int*));
for(i=0;i<m;i++)
c[i]=(int*)malloc(n*sizeof(int));
LCSLength(m,n,str1,str2,c,bi,bj,max);
printf("%d\n",max);
for(i=bi-max+1;i<=bi;i++)
printf("%c",str1[i]);
printf("\n");
return0;
}
分享到:
相关推荐
最长公共子字符串共有两种解决方法,下面具体说说我的思路方法一:Longest Common Substring和Longest Common Subsequence是有区别的X = <a>Y = <a>X和Y的Longest Common Sequence为,长度为4X和Y的Longest Common ...
最长公共子字符串问题是一个经典计算机科学问题,主要目标是找到两个字符串中连续出现的最长相同字符序列。在C语言中,这个问题通常通过动态规划方法来解决。动态规划是一种解决复杂问题的有效策略,它通过将问题...
Java中的动态规划法被广泛应用于解决复杂的问题,如求解最长公共子序列(Longest Common Subsequence, LCS)和最长公共子字符串(Longest Common Substring, LSS)。这两个概念在计算机科学中尤其是在字符串处理和...
标题中的“求两字符串的最长公共子字符串”指的是在两个给定的字符串中找到它们共有的最长连续子串。这是一个经典的计算机科学问题,通常在字符串处理、文本比较和算法设计中出现。描述提到的“用穷举法完成”,指的...
最长公共子字符串(LCS)服务器概述构建一个简单的Web应用程序,允许用户在给定字符串列表的情况下请求最长公共子字符串。 功能要求通过HTTP POST解决最长的公共子字符串问题用户应该能够通过向服务器位于...
最长公共子序列(Longest Common Subsequence,LCS)是计算机科学中一种经典的字符串问题,主要涉及算法设计和分析。它的目标是找到两个给定序列(通常为字符串)的最长子序列,该子序列在原序列中不需连续,但必须...
输入两个字符串, 求它们最长公共字串的长度
cout 两个字符串的最长公共子序列为:" ; for (i = tep - max + 1; i ; i++) cout [i]; cout ; } } void main() { string s1, s2; cout 请输入两个字符串:" ; cout 一个字符串为:"; cin >> s1; cout 另一...
### C++实现最长公共子序列算法详解 在深入解析给定代码之前,我们先来了解一下“最长公共子序列”(Longest Common Subsequence,简称LCS)的基本概念及其在计算机科学中的应用。LCS问题是一种典型的动态规划问题...
求解最大子序列、最长递增子序列、最长公共子串、最长公共子序列. http://blog.csdn.net/ssuchange/article/details/17341693
本文实例讲述了C语言求两个字符串的最长公共子串的方法。分享给大家供大家参考。具体实现方法如下: #include "stdio.h" #include "string.h" #include "stdlib.h" void getCommon(char str1[],char str2[],char * ...
利用指针来查询两个字符串的最长公共子序列,并输出的算法。
例如,对于字符串`a="abcrrrerads"`和字符串`b="afdabcssbcrrresswrds"`,最长公共子串为`"bcrrre"`。 #### 三、算法原理 本程序采用了一个简单的动态规划方法来解决问题。具体步骤如下: 1. **初始化**:首先...
最长公共子序列(Longest Common Subsequence,LCS)是一个经典的计算机科学问题,它涉及到序列比对和字符串处理。在两个或多个序列中,LCS是指没有改变原有顺序的情况下,存在于所有序列中的最长子序列。这个问题在...
最长公共子序列(Longest Common Subsequence,简称LCS)是计算机科学中一个重要的算法问题,它主要应用于字符串比较、文本编辑、生物信息学等领域。在文本编辑器中,LCS用于比较两份文档的差异,帮助进行合并或冲突...
算法工程项目问题描述: 【题目】 动态规划思维训练——最长公共子序列算法的设计与实现 给定两个序列X={X1, X2,···,Xm}和...字符串Y:{ABCBDAB},则这两个字符串的最长公共子序列长度为4,最长公共子序列是:BCBA
根据给定的文件信息,我们可以总结出以下关于“输出最长...综上所述,本程序提供了一种有效的解决方案来求解最长公共子序列问题,通过动态规划的思想和具体实现步骤,可以高效地找到两个字符串之间的最长公共子序列。
### 最长公共子序列算法总结 #### 一、O(n^2)算法 在讨论最长公共子序列(Longest Common Subsequence,简称LCS)问题时,通常会提及两种主要的算法实现方式:一种时间复杂度为O(n^2),另一种则通过优化达到O...