这题怎么做啊?
不会是必须要用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; } 我这个哪里错了?实在不能理解。