zoukankan      html  css  js  c++  java
  • 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("
    ");
        }
    
    }

     

  • 相关阅读:
    基于Dubbo框架构建分布式服务(一)
    大型网站架构系列:消息队列
    Redis Cluster 分区实现原理
    Redis五种数据结构简介
    Java中创建对象的5种方式
    Netty 系列之 Netty 高性能之道
    Java 抽象类与接口
    谈iOS抓包:Mac下好用的HTTP/HTTPS抓包工具Charles
    Web系统大规模并发——电商秒杀与抢购
    [转]MS SQL Server 数据库连接字符串详解
  • 原文地址:https://www.cnblogs.com/Jadon97/p/6830620.html
Copyright © 2011-2022 走看看