水水~
今天写了KMP,本来想找点KMP的题写,搜了个字符比较的这个。
给你一个字符串,看最多有几个相等的子串。看题目吧,很好理解的。
第一反应用KMP,后来觉得没必要啊。
从1到len/2,如果是len的除数,就比较整个串是不是前i个,最简单的循环,有不匹配的就直接跳出来。
嗨皮~/(^o^)/~今天A题啦~~
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
#include <string.h>
#include <math.h>
#define MAX 1000005
using namespace std;
char str[MAX];
int len;
int cmp(int pos)
{
int i = pos,k;
while( i < len )
{
for(k=0; k<pos; k++)
if( str[i] == str[k] )
i++;
else
return 0;
}
return 1;
}
int main()
{
int i,j,flag;
while( scanf("%s",str) != EOF && strcmp(str,".") )
{
len = strlen(str); flag = -1;
for(i=0; i<=len/2; i++)
{
if( len % (i+1) == 0 )
{
if( cmp(i+1) )
{
flag = len/(i+1);
break;
}
}
}
if( flag != -1 )
printf("%d/n",flag);
else
printf("1/n");
}
return 0;
}