POJ 2406 Power Strings(字符串的最小循环节)

题目链接:http://poj.org/problem?id=2406

题意:确定字符串最多是多少个相同的字串重复连接而成的

思路:关键是找到字符串的最小循环节

code:

 1 #include <cstdio>
 2 #include <cstring>
 3 const int MAXN = 1000005;
 4 char s[MAXN];
 5 int next[MAXN];
 6 void GetNext()
 7 {
 8     int len = strlen(s);
 9     int i = 0;
10     int j = -1;
11     next[0] = -1;
12     while (i < len)
13     {
14         if (-1 == j || s[i] == s[j]) next[++i] = ++j;
15         else j = next[j];
16     }
17 }
18 
19 int main()
20 {
21     while (scanf("%s", s), s[0] != '.')
22     {
23         int len = strlen(s);
24         GetNext();
25         if (len % (len - next[len]) == 0) printf("%d\n", len / (len - next[len]));
26         else printf("1\n");
27     }
28     return 0;
29 }

 

转载于:https://www.cnblogs.com/ykzou/p/4460629.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值