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;
}
全部评论

相关推荐

11-07 13:31
怀化学院 Java
勇敢牛牛不怕难:又疯一个
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务