zoukankan      html  css  js  c++  java
  • poj-2406(kmp水题)

    题意:定义一个a*b=字符串a连接字符串b;给你一个字符串s,问你这个字符串最多能用多少个字符串t连接得到;例如:aaaa=4个a构成;

    解题思路:kmp水题,next数组除了查找字串以外最广泛的一种用法,用来判定一个串是不是循环串,如果是,输出原串的长度/最小的循环节,否则,输出1就行了;

    代码:

    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #define maxn 1000500
    using namespace std;
    int next[maxn];
    char t[maxn];
    int tlen;
    void get_next()
    {
        int j=0,k=-1;next[0]=-1;
        while(j<tlen)
        {
            if(k==-1||t[j]==t[k])
                next[++j]=++k;
            else
                k=next[k];
        }
    }
    int main()
    {
        while(gets(t))
        {
            tlen=strlen(t);
            if(strcmp(t,".")==0)
                break;
            get_next();
            int len=tlen-next[tlen];
            if(tlen%len==0)
            {
                printf("%d
    ",tlen/len);
            }
            else
            {
                printf("1
    ");
            }
            //printf("%d
    ",ans);
        }
    }
    

      

  • 相关阅读:
    59. Spiral Matrix II
    58. Length of Last Word
    57. Insert Interval
    56. Merge Intervals
    55. Jump Game
    54. Spiral Matrix
    53. Maximum Subarray
    52. N-Queens II
    51. N-Queens
    java封装学习
  • 原文地址:https://www.cnblogs.com/huangdao/p/9430596.html
Copyright © 2011-2022 走看看