• 【JLOI2007】周期串


    Description

      如果一个字符串是以一个或者一个以上的长度为k的重复字符串所连接成的,那么这个字符串就被称为周期为k的字符串。
      例如:
      字符串’abcabcabcabc’周期为3,因为它是由4个循环’abc’组成的。它同样是以6为周期(两个重复的’abcabc’)和以12为周期(一个循环’abcabcabcabc’)。
      问 题:写一个程序,读入一个字符串,并测定它的最小周期。

    Input

      一个最长为100的没有空格的字符串。

    Output

      一个整数表示输入的字符串的最小周期。

    Sample Input

    HoHoHo

    Sample Output

    2


    思路

    • kmp算法&前缀函数

    让我们计算 s 的前缀函数。通过使用该函数的最后一个值,我们定义值。我们将证明,如果 k 整除 n ,那么 k 就是答案,否则不存在一个有效的压缩,故答案为 n 。


    代码

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    using namespace std;
    int nxt[105];
    void getnext(char a[],int len)
    {
    	int i=0,j=-1; nxt[0]=-1;
    	while(i<len)
    	{
    		if(j==-1||a[i]==a[j]) ++i,++j,nxt[i]=j;
    		else j=nxt[j];
    	}
    }
    int main()
    {
    	char a[105]; scanf("%s",&a);
    	int len=strlen(a);
    	getnext(a,len);
    	int k=len-nxt[len];
    	if(len%k) cout<<len<<'
    ';
    	else cout<<k<<'
    ';
    	return 0;
    }
    
  • 相关阅读:
    公司后台切图
    XMLHttpRequest对象
    XML/JSDOM处理
    js访问xml之节点操作
    CSS3 输入框阴影效果及其他阴影效果
    GitHub用户仓库批量下载
    WTL10_9163应用向导安装后的小问题
    别学MFC了,要学就学这些...
    使用基于范围的 for 循环迭代范围
    使用未命名的命名空间代替静态全局变量
  • 原文地址:https://www.cnblogs.com/wuwendongxi/p/14255090.html
Copyright © 2020-2023  润新知