UVa 455 Periodic Strings(周期串)

来源:互联网 发布:淘宝客服图片大全 编辑:程序博客网 时间:2024/05/17 22:08
//求字符串的最小周期//我的思路,找与s[0]相同的字符,然后判定从s[0]到此字符之前的长度能不能作为一个周期#include <stdio.h>#include <stdlib.h>#include <string.h>int main(){    char s[110];    int n;    scanf("%d",&n);    getchar();    while(n--){        getchar();        scanf("%s",s);        if(strlen(s)==1){            printf("%d\n",1);            if(n)                putchar('\n');            continue;        }        int i,j;        for(i=1;s[i]!='\0';i++){            if(s[i]==s[0]&&strlen(s)%i==0){//此处判断此时的周期长度能被总长度整除                for(j=i;s[j]!='\0';j++)//!!!重点!!!此处判断当前采取的周期合适                    if(s[j]!=s[j%i])                       break;                if(s[j]=='\0'){                    printf("%d\n",i);                    if(n)                        putchar('\n');                    break;                }            }        }        if(s[i]=='\0'){           printf("%d\n",strlen(s));              if(n)                putchar('\n');        }    }    return 0;}/*他人方法:暴力搜索解题思路:在长度范围之内,一个个枚举周期即可,注意周期应能被总长度整除#include<stdio.h>#include<string.h>#include<ctype.h>#define max 100+10char s[max];int main(){    int n, len;    scanf("%d", &n);    getchar();    while (n--)    {        getchar();        gets(s);        len = strlen(s);        for (int i = 1; i <= len;i++)        if (len%i == 0)        {            bool ok = true;            for (int j = i; j < len;j++)            if (s[j] != s[j%i])            {                ok = false;                break;            }            if (ok)            {                printf("%d\n", i);                if (n)                    putchar('\n');                break;            }        }    }    return 0;}*/

1 0
原创粉丝点击