zoukankan      html  css  js  c++  java
  • POJ2752 NEXT[J]特性应用利用。

    题意:求一个字符串所有的前缀和后缀相同的情况,每个情况输出长度,如 ababcababababcabab :2 4 9 18
    思路:next数组应用,利用j=nxet[i],i之前与开头相同的字符串长度,每求一次next[j],可得一次答案,

    反复求即可,逆序输出。


    #include<iostream>  //1A,172MS
    #include<string>
    #include<cstdio>
    using namespace std;
    int next[400002];
    int ans[400002];
    void get_next(string s)
    {
        int i=0,j=-1;
        int len=s.size();
        next[0]=-1;
        while(i<len)
        {
          if(j==-1||s[i]==s[j])
          {
              i++;j++;
              next[i]=j;
          }
          else
          {
              j=next[j];
          }
        }
    }
    int main()
    {
        string s;
        while(cin>>s)
        {
            int num=1;
            int j=s.size();
            get_next(s);
            ans[0]=j;
            while(next[j]>0)    //反复求next[j]
            {
                ans[num++]=next[j];
                j=next[j];
            }
            for(int i=num-1;i>=0;i--)
               if(i!=0) printf("%d ",ans[i]);
               else printf("%d
    ",ans[i]);
        }
        return 0;
    }
    


  • 相关阅读:
    hdu3874
    spoj D-query
    hdu4348
    hdu4417
    hdu2665
    [LUOGU] P1057 传球游戏
    [CODEVS] 2193 数字三角形WW
    [CODEVS] 2189 数字三角形W
    [模板] 线段树
    [模板] 树状数组
  • 原文地址:https://www.cnblogs.com/yezekun/p/3925723.html
Copyright © 2011-2022 走看看