zoukankan      html  css  js  c++  java
  • 紫书第三章练习 uva455 Periodic Strings by crq

    A character string is said to have period k if it can be formed by concatenating one or more repetitions of another string of length k. For example, the string "abcabcabcabc" has period 3, since it is formed by 4 repetitions of the string "abc". It also has periods 6 (two repetitions of "abcabc") and 12 (one repetition of "abcabcabcabc").
    Write a program to read a character string and determine its smallest period.

    Input
    The first line oif the input file will contain a single integer N indicating how many test case that your program will test followed by a blank line. Each test case will contain a single character string of up to 80 non-blank characters. Two consecutive input will separated by a blank line.

    Output
    An integer denoting the smallest period of the input string for each input. Two consecutive output are separated by a blank line.

    Sample Input
    1

    HoHoHo


    Sample Output
    2

    题意:给定一个字符串,它是由某个长度为x的字符串重复若干次产生的,问x的最小值是多少,比如题意中的abcabcabcabc,是由abc重复4次产生的,abc这个字符串的长度为3,所以输出3。

    求解:因为字符串长度最大只有80个字符,因此可以直接暴力解决。这里设将字符串分成i段(i从大到小遍历,从而保证x从小到大遍历),由此求出x的值,并判断每段长度为x的子串是否都一样,只要找到一组即退出,便是x的最小值。

    AC代码:

     1 #include <iostream>
     2 #include <string>
     3 using namespace std;
     4 
     5 int main()
     6 {
     7     string s;
     8     int n;
     9     cin>>n;
    10     for(int t=0;t<n;t++)
    11     {
    12         cin>>s;
    13         int i, len = s.length();
    14         int res = -1;
    15         for(i=len;i>=1;i--)
    16         {
    17             if(len%i==0)
    18             {
    19                 int x = len/i;
    20                 string ss = s.substr(0,x);
    21                 int pos = x, flag = 0;
    22                 while(pos<len)
    23                 {
    24                     string ss2 = s.substr(pos, x);
    25                     if(ss2!=ss)
    26                     {
    27                         flag = 1;
    28                         break;
    29                     }
    30                     pos += x;
    31                 }
    32                 if(flag==0)
    33                 {
    34                     res = x;
    35                     break;                    
    36                 }
    37             }
    38         }
    39         if(res==-1)
    40             res = len;
    41         if(t)
    42             cout<<endl;
    43         cout<<res<<endl;
    44     }
    45     return 0;
    46 }
  • 相关阅读:
    (基础) --- KMP字符串
    (基础)--- 前缀和、差分
    PHOTOSHOP --- 分辨率、图片保存格式
    Oracle Delete数据后手动释放空间
    掌握爬虫技术需要学哪些内容?
    如何用python制作动态二维码,来哄女朋友开心?
    python为什么会环境变量设置不成功
    python和js交互调用的方法
    基于PHP实现解密或加密Cloudflar邮箱保护
    基于pytorch中的Sequential用法说明
  • 原文地址:https://www.cnblogs.com/tzcacm/p/6781851.html
Copyright © 2011-2022 走看看