这题怎么做啊?
不会是必须要用KMP匹配才能过吧。我觉得我的写法没错,但效率不高,不过WA了。不理解为什么。
#include<stdio.h>
#include<string.h>

char ch[1000005];
int len;

int match(int beg)//从beg开始匹配
{
    int i,j,flag,k;
    j=0;
    for(i=beg;i<=len;i++)//匹配后缀
    {                 
         if(ch[j]!=ch[i]) return 0;
         j++;
    }
    for(i=1;i<beg;i++)//匹配中间
    {
        if(ch[i]==ch[beg])
        {
            flag=1;
            k=i;
            for(j=beg;j<=len;j++)
            {
                if(ch[j]!=ch[k])
                {
                    flag=0;
                    break;
                }
                k++;                 
            }
            if(flag) return 1;//匹配成功
        }              
    }
    return 0;//匹配失败
}

void print(int beg)//输出
{
    int i;
    for(i=beg;i<=len;i++)
    printf(\"%c\",ch[i]);
    printf(\"\\n\");
}

int main()
{
    int i,flag;
    while(scanf(\"%s\",ch)!=EOF)
    {
        len=strlen(ch);
        len--;
        flag=0;
        for(i=len;i>1;i--)//从后往前找到一个字符和字符串的第一个字符相等
        {
            if(ch[i]==ch[0])
            if(match(i))
            {
                print(i);
                flag=1;
                break;
            }               
        }
        if(!flag) printf(\"Just a legend\\n\");//无子串
    }
    return 0;
} 


我这个哪里错了?实在不能理解。
© 2015 HUST ACMICPC TEAM. All Right Reserved.