zoj 1905 || poj 2406 Power Strings

水水~

 

今天写了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; }  

 

 

你可能感兴趣的:(zoj 1905 || poj 2406 Power Strings)