首页 > 其他 > 详细

HDU 3746

时间:2014-05-21 19:36:09      阅读:339      评论:0      收藏:0      [点我收藏+]

http://acm.hdu.edu.cn/showproblem.php?pid=3746

kmp的Nxet数组求字符串循环节例题

lenB%(lenB-Next[lenB])==0则其有周期lenB/(lenB-Next[lenB]),其中最小循环节长度是lenB-Next[lenB]

bubuko.com,布布扣
#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
using namespace std ;
char B[100005] ;
int Next[100005],lenB ;
void GetNext()
{
    int i,j ;
    Next[1]=0 ;  
    j=0 ;
    for(i=2 ;i<=lenB ;i++)
    {
        while(j>0 && (B[j+1]!=B[i]))j=Next[j] ;
        if(B[j+1]==B[i])j++ ;
        Next[i]=j ;
    }
}
int main()
{
    int t ;
    scanf("%d",&t) ;
    while(t--)
    { 
        scanf("%s",B+1) ;
        lenB=strlen(B+1) ;
        GetNext() ;
        int minn=lenB-Next[lenB] ;
        if(!Next[lenB])printf("%d\n",lenB) ;
        else if(lenB%minn)
            printf("%d\n",minn-lenB%minn) ;
        else
            printf("0\n") ;
    }
    return 0 ;
}
View Code

 

HDU 3746,布布扣,bubuko.com

HDU 3746

原文:http://www.cnblogs.com/xiaohongmao/p/3739849.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!