zoukankan      html  css  js  c++  java
  • Just Oj 2017C语言程序设计竞赛高级组D: 字符串最大表示(next数组)

     D: 字符串最大表示

    时间限制: 1 s      内存限制: 128 MB     

    题目描述

    有如下定义,abcnabcn表示字符串abc重复n次,例如abc2abc2表示abcabc。

    给定一个字符串,求可以被表示的最大n,例如:aaaa最大个数是4,重复子串为a;abababab最大个数是4,重复子串是ab;ababababc最大个数是1, 重复子串是ababababc。

    输入

    第一行输入n,表示字符串的个数。(n <= 100)

    接下来n行,每行一个字符串。(字符串长度<=100000)

    输出

    输出可以表示给定字符串的最大子串个数

    样例输入

    3
    aaaa
    abababab
    abc
    

    样例输出

    4
    4
    1
    

    提示

    输入数据量大,推荐使用scanf

    来源

    jxust__ACM

    题意:求出循环段重复次数
    分析:求出next数组,最后一个next值就是整个字符串的最长公共前后缀,长度减去该值就是循环段的长度长度除以循环段就是循环段个数;

    #include<iostream>
    #include<string.h>
    #include<algorithm>
    using namespace std;
    char s[100011];
    int nex[100011];
    void get_next()
    {
            int i=0,j=-1,len=strlen(s);
            nex[0]=-1;
            while(i<len)
            {
                    if(j==-1||s[i]==s[j])
                            nex[++i]=++j;
                    else
                            j=nex[j];
            }
    }
    int main()
    {
            int n,len;
            scanf("%d",&n);
            while(n--)
            {
                    memset(nex,0,sizeof(nex));
                    scanf("%s",s);
                    get_next();
                    len=strlen(s);
                    printf("%d
    ",len/(len-nex[len]));
            }
    }
  • 相关阅读:
    搜索------深度优先DFS-----模板2:例1 例2 例3 例4
    memset
    if(!a)
    bailian 2698
    皇后问题
    搜索------深度优先DFS-----模板1:例1 例2 例3 例4
    bailian 2754八皇后
    ByteCache
    Java-IntegerCache
    JVM运行时数据区
  • 原文地址:https://www.cnblogs.com/aeipyuan/p/10079524.html
Copyright © 2011-2022 走看看