• UVA 227 周期串


    题意:

    给一个字符串,寻找最短的循环节

    如abcabcabcabc以3为周期,也按6和12为周期。

    分析:

    因为循环节肯定是相等的,所以枚举串长度的所有约数的循环节再判断是否相等即可。

    我的方法是枚举每一个相邻的串,后来看了下题解,可以用%串长度的方式去比较后面的串和第一串,这样应该会比我快一倍。

    #include <iostream>
    #include <cstdlib>
    #include <cstring>
    #include <cstdio>
    using namespace std;
    char str[104];
    int main()
    {
        int n;
        scanf("%d",&n);
        while (n --) {
            scanf("%s",str);
            int len = strlen(str);
            for (int k,i = 1 ; i <= len ; ++ i)
                if (len%i == 0) {
                    for (k = i ; k < len ; ++ k)
                    {
                        printf("%d	",i);
                        printf("%c %c
    ", str[k], str[k%i]);//不断枚举后面的子串 与第一个子串比较 代码少写很多
                        if (str[k] != str[k%i])
                            break;
                    }
    
                    if (k == len) {
                        printf("%d
    ",i);
                        break;
                    }
            }
            if (n) printf("
    ");
        }
        return 0;
    }
    //我的代码 第一次写这种多个函数参数的 以后写判断最好都设置一个函数 直接return太方便了
    #include<bits/stdc++.h>
    using namespace std;
    bool loop(const char* str,int i,int length)
    {
        int j;
        for(j = 0; j < length / i - 1; j ++)
        {
            for(int k = 0; k < i; k++)
            {
    
                if(str[k+j*i] != str[k+(j+1)*i])
                    return false;
            }
        }
        return true;
    }
    int main()
    {
        int t;
        scanf("%d", &t);
        while(t--)
        {
            char str[100];
            scanf("%s", str);
            int length = strlen(str);
            int ans = length;
            for(int i = 1; i < length; i++)
            {
                if(length % i == 0)
                {
                    if(loop(str,i,length))
                    {
                        ans = i;
                        break;
                    }
    
                }
            }
            printf("%d
    ",ans);
            if(t) printf("
    ");
        }
    
    }

     

  • 相关阅读:
    【转】StackExchange.Redis 事务控制和Batch批量操作
    mysql 修改时子查询的问题
    mysql 对于有null值的 NOT IN和NOT EXISTS
    【转】Core使用Redis做Session进程外储存
    Filter的注入方式 NET Core
    MiddleWare中间键实现 简单的防盗链 AOP
    c# Jenkins+PowerShell持续集成环境搭建
    VS2019下载离线安装包
    1226 六晴
    1225 五 晴
  • 原文地址:https://www.cnblogs.com/Jadon97/p/6830620.html
Copyright © 2020-2023  润新知