[kuangbin带你飞]专题十六 KMP & 扩展KMP & Manacher D Cyclic Nacklace

题目

思路

利用到kmp的next数组的一个性质。

  • 最小循环节长度length = plen - next[plen];
  • 如果plen%length == 0(plen!=length) ,那么完全循环。
  • 否则需要增加plen - plen%length完成循环。(注意plen==length则需要增加plen)
#include<iostream>
using namespace std;
const int MAXN=10000002;

string P;
string T;

int NEXT[MAXN];
int plen,tlen;
void getNext(){
    NEXT[0] = -1;
    int k = -1 ;
    int j = 0 ;
    while(j<plen){
        if(k==-1||P[k]==P[j]){
            NEXT[++j] = ++k;
        }else{
            k = NEXT[k];
        }
    }
    
}

int main(){
    
    ios::sync_with_stdio(false);
    int TT;
    cin>>TT;
    while(TT--){
        cin>>P;
        plen = P.length();
        getNext();
        int length = plen - NEXT[plen];
//      for(int i = 0 ;i<plen;i++){
//          cout<<NEXT[i]<<" ";
//      }
//      cout<<"\n";

        if(length!=plen&&plen%length==0) {
            
            cout<<0<<"\n";
        }
        else{
            cout<<length - plen%length<<"\n";
        }
    }       
    return 0;
} 
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 字符串匹配KMP算法详解 1. 引言 以前看过很多次KMP算法,一直觉得很有用,但都没有搞明白,一方面是网上很少有...
    张晨辉Allen阅读 2,452评论 0 3
  • KMP 学习记录 kuangbin专题十六——KMP KMP 学习总结 朴素 KMP 算法 拓展 KMP 算法(E...
    染微言阅读 582评论 0 3
  • 常听人说,婚姻是一座围城,城外的人想进去,城里的人想出来。 幸福的婚姻大多相似,不行的婚姻则各不相同!很多婚...
    蜜桃女人阅读 200评论 0 1
  • 当设计师标注十六进制颜色码的时候还需要去换算为 RGB 值事件很费事的事,现在添加一个宏定义就可以快速使用十六进制...
    孟豊Mike阅读 954评论 0 1
  • 6月17日精进。今日体验,早上开车去漆房 喷漆,到门口 才知道铺瓷砖进不去,得等一天,把车放外面 不安全 又给开回...
    吕志刚l阅读 120评论 0 0