chaper3_exerise_UVa455_周期串

 1 #include<iostream>
 2 #include<cstring>
 3 #include<stdio.h>
 4 using namespace std;
 5 const int maxn = 1010;
 6
 7 int equ(const char *a,int beg,int beh)        //总是与首字符形成的串相比,beh为后一个的序列
 8 {
 9     int n = strlen(a), i;
10     for (i = 0; i < n; i++)
11     {
12         if (a[i] != a[(beh+i)%n])
13             return 0;
14     }
15     return beh;
16
17 }
18 int main(void)
19 {
20     int T;
21     char a[maxn];
22     cin >> T;
23     while (T--)
24     {
25         int count = 0;
26         cin >> a;
27         int ans = 0;
28         for (int i = 1; i < strlen(a); i++)
29         {
30             if (equ(a,0,i)) {       //后面开始形成的串如果和首字符形成的(环形)串相同,即后面的(位置)为周期
31                 count = equ(a,0,i);
32                 break;
33             }
34         }
35         if (count)
36             cout << count << endl;
37         else
38             cout << strlen(a) << endl; //如果没有,即输入的字符长度为周期
39         if (T > 0)                     //不要多输出换行
40             cout << endl;
41     }
42     return 0;
43 }
时间: 2024-08-04 01:48:54

chaper3_exerise_UVa455_周期串的相关文章

【周期串】NYOJ-1121 周期串

[题目链接:NYOJ-1121] 例如:abcabcabc 该字符串的长度为9,那么周期串的长度len只可能为{1,3,9},否则就不可能构成周期串. 接下来,就是要在各周期间进行比较.描述不清...自己走一遍就懂了. 1 #include<iostream> 2 #include<cstring> 3 using namespace std; 4 const int MAXN = 202; 5 char s[MAXN]; 6 int main(){ 7 while((cin &g

周期串-java

import java.util.Scanner;/** * 周期串 * @author NEU-2015 * */public class Demo {    public static void main(String[] args) {        Scanner input = new Scanner(System.in);        String str = null;        boolean flag = true;          while (input.hasNe

[华为机试练习题]1.周期串问题

题目一[周期串问题] 如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期.例如,abcabcabcabc以3为周期(注意,它也可以6和12为周期,结果取最小周期3).字符串的长度小于等于100,由调用者保证. 接口说明 原型: int GetMinPeriod(char *inputstring); 输入参数: char * inputstring:字符串 返回值: int 字符串最小周期 代码一 /*-----------------------------------

HDU 1358 (所有前缀中的周期串) Period

题意: 给出一个字符串,在所有长度大于1的前缀中,求所有的周期至少为2的周期串,并输出一个周期的长度以及周期的次数. 分析: 有了上一题 HDU 3746 的铺垫,这道题就很容易解决了 把next求出来,然后逐个判断即可. 1 #include <cstdio> 2 #include <cstring> 3 4 const int maxn = 1000000 + 10; 5 char p[maxn]; 6 int n, next[maxn]; 7 8 void get_next(

算法竞赛入门经典 5.1.3 周期串

5.1.3  周期串 如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以为周期.例如,abcabcabcabc以3为周期(注意,它也以6和12为周期).输入一个长度不超过80的串,输出它的最小周期. 样例输入:HoHoHo 样例输出:2 #include <stdio.h> #include <stdlib.h> #include <string.h> int main(int argc, char *argv[]) { char s[100]; sca

WLS的周期串(C++)

WLS的周期串 难度级别:A: 运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期.例如,abcabcabcabc以3为周期(注意,它也以6和12为周期).输入一个长度不超过1000的串输出它的最小周期. 输入 一个由常用字符组成的字符串 输出 输入字符串的最小周期 输入示例 abcabcabcabc 输出示例 3 #include <cstdio> #include

算法篇——最小周期串

来源:<算法竞赛入门经典>例题5.1.3 题目:如果一个字符串可以由某个长度为k的字符串重复多次得到,我们说该串以k为周期.例如,abcabcabcabc以3为周期(注意,它也以6和12为周期).输入一个长度不超过80的串,输出它的最小周期. 样例输入:HoHoHo 样例输出:2 分析:题目中说过,字符串可能会有多个周期.但因为只需求出最小的一个,可以从小到大枚举各个周期,一旦符合条件就立即输出. 源码: #include<stdio.h> #include<string.h

uva 1328 - Period (周期串的判断 kmp)

题意:给一个长为n的字符串,问字符串的前缀是不是周期串,如果是周期串,输出前缀的最后一个字母的位置和最短周期 思路:kmp字符串匹配的性质运用. 对于前i个字符,如果f[i]不等于零,说明在此字符串的前缀中,有一部分[0,f[i]]和本字符串[i-f[i],i]的这一部分是相同的.如果这i个字符组成一个周期串,那么错开的一部分[f[i],i]恰好是一个循环节.(换句话说,如果满足f[i]不等于零 && [f[i],i]是循环节这两点,就可以说明前i个字符组成一个周期串) code: #in

E - Power Strings,求最小周期串

E - Power Strings Time Limit:3000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I64u Submit Status Practice POJ 2406 Description Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = &