NOI-30-字符环
描述
有两个由字符构成的环。请写一个程序,计算这两个字符环上最长连续公共字符串的长度。例如,字符串“ABCEFAGADEGKABUVKLM”的首尾连在一起,构成一个环;字符串“MADJKLUVKL”的首尾连在一起,构成一个另一个环;“UVKLMA”是这两个环的一个连续公共字符串。
输入
一行,包含两个字符串,分别对应一个字符环。这两个字符串之间用单个空格分开。字符串长度不超过255,且不包含空格等空白符。
输出
输出一个整数,表示这两个字符环上最长公共字符串的长度。
样例输入
ABCEFAGADEGKABUVKLM MADJKLUVKL
样例输出
6
暴力解题,测试数据比较小。暂时想不出啥好办法……
#include <stdio.h>
#include <string.h>
#define MAX(a, b) a > b ? a : b
int main(int argc, const char * argv[])
{
int i, j, k;
int lenA, lenB, len, maxLen;
char A[256], B[256];
while (~scanf("%s %s", A, B))
{
maxLen = 0;
lenA = (int)strlen(A);
lenB = (int)strlen(B);
for (i = 0; i < lenA; i++)
{
for (j = 0; j < lenB; j++)
{
len = 0;
for (k = 0; k < lenA + lenB; k++)
{
if (A[(i + k) % lenA] == B[(j + k) % lenB])
{
len++;
}
else
{
maxLen = MAX(len, maxLen);
len = 0;
}
}
}
}
printf("%d\n", maxLen);
}
return 0;
}