• POJ2406-Power Strings(kmp循环节)


    Power Strings
    Time Limit: 3000MS   Memory Limit: 65536K
    Total Submissions: 31111   Accepted: 12982

    Description

    Given two strings a and b we define a*b to be their concatenation. For example, if a = "abc" and b = "def" then a*b = "abcdef". If we think of concatenation as multiplication, exponentiation by a non-negative integer is defined in the normal way: a^0 = "" (the empty string) and a^(n+1) = a*(a^n).

    Input

    Each test case is a line of input representing s, a string of printable characters. The length of s will be at least 1 and will not exceed 1 million characters. A line containing a period follows the last test case.

    Output

    For each s you should print the largest n such that s = a^n for some string a.

    Sample Input

    abcd
    aaaa
    ababab
    .
    

    Sample Output

    1
    4
    3
    题意:输出循环节最大的个数
    
    
    思路:next函数推断一下就可以:
    若n%(n-next[n])==0 ans = n/(n-next[n])
    否则 ans = 1
    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <vector>
    #include <string>
    #include <algorithm>
    #include <queue>
    using namespace std;
    const int maxn = 1000000+10;
    int next[maxn];
    char str[maxn];
    int n;
    void getNext(){
        next[0] = next[1] = 0;
        for(int i = 1,j; i < n; i++){
            j = next[i];
            while(j && str[i] != str[j]) j = next[j];
            if(str[i]==str[j]) next[i+1] = j+1;
            else next[i+1] = 0;
        }
    }
    int main(){
    
        while(~scanf("%s",str) && strcmp(str,".")!=0){
            n = strlen(str);
            getNext();
            int ans;
            if(n%(n-next[n])!=0) ans = 1;
            else ans =  n/(n-next[n]);
            printf("%d
    ",ans);
        }
        return 0;
    }
    


  • 相关阅读:
    关于json前后台传值
    [LeetCode] #29 Divide Two Integers
    [LeetCode] #28 Implement strStr()
    [LeetCode] #27 Remove Element
    [LeetCode] #26 Remove Duplicates from Sorted Array
    [LeetCode] #25 Reverse Nodes in k-Group
    [LeetCode] #24 Swap Nodes in Pairs
    [LeetCode] #23 Merge k Sorted Lists
    [LeetCode] #22 Generate Parentheses
    [LeetCode] #21 Merge Two Sorted Lists
  • 原文地址:https://www.cnblogs.com/mthoutai/p/6776273.html
Copyright © 2020-2023  润新知