-
总时间限制:
- 1000ms 内存限制:
- 65536kB
-
描述
-
有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环;字符串“MADJKLUVKL”的首尾连在一起,构成一个另一个环;“UVKLMA”是这两个环的一个连续公共字符串。
输入
- 一行,包含两个字符串,分别对应一个字符环。这两个字符串之间用单个空格分开。字符串长度不超过255,且不包含空格等空白符。 输出
- 输出一个整数,表示这两个字符环上最长公共字符串的长度。 样例输入
-
ABCEFAGADEGKABUVKLM MADJKLUVKL
样例输出
-
6
#include<stdio.h>
#include<string.h>
int gl,i1,j1,i2,j2,l1,l2,l,suit_l; //gl为公共子串的长度;
char s1[256]={0},s2[256]={0},h1[512]={0},h2[512]={0},t[256];
int main()
{
//freopen("2.cpp","r",stdin);
scanf("%s %s",s1,s2);
strcpy(h1,s1);
strcat(h1,s1);
h1[strlen(h1)-1]=0;
strcpy(h2,s2);
strcat(h2,s2);
h2[strlen(h2)-1]=0;
l1=strlen(s1);
l2=strlen(s2);
l=(l1>l2?l2:l1);
l1=strlen(h1);
l2=strlen(h2);
for(gl=1;gl<=l;gl++)
{
for(i1=0;i1<=l1-gl;i1++) //当前母串的起始点
{
for(j1=0;j1<gl;j1++) //j:子串中的当前位置
{
t[j1]=h1[i1+j1]; //h1+j1:环中当前位置
}
t[j1]=0;
for(i2=0;i2<=l2-gl;i2++)
{
for(j2=0;j2<gl;j2++)
{
if(h2[i2+j2]!=t[j2])break;
}
if(j2==gl)
{
suit_l=gl;
break;
}
}
if(j2==gl) //如果找到一个子串即可跳出循环
{
break;
}
}
}
printf("%d",suit_l);
return 0;
}