博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
hdu 3746 kmp求循环节 下标从1开始
阅读量:7214 次
发布时间:2019-06-29

本文共 922 字,大约阅读时间需要 3 分钟。

长度为m[1,2...m]的模式的循环节为 m-next[m] ,

aaa  循环节clc为1  (clc=m-next[m]= 3-2  =1)       此时   m%clc == 0   表示有3个完整的循环节

ababa    循环节为2 (clc = 5-3=2)         此时   m%clc = 5%2 =1     表示有两个循环节 还余一个数  ,需添加的字符数 为  len - m%clc

abaed 循环节为 5   (clc = 5-0=5)     此时, clc = m   表示只有一个完整的循环节 ,如果至少要两个循环节的话 ,需添加的字符数 为 len

下表从1 开始的代码如下:

#include
#include
#include
#include
#define N 100005using namespace std;char P[N];int m;int next[N]; void Prefix_Func() { int i,k; k=0; next[1]=0; for(i=2;i<=m;i++) { while(k>0 && P[k+1]!= P[i]) k=next[k]; if(P[k+1] == P[i]) k++; next[i]=k; } }int main(){ int t,clc; cin>>t; while(t--) { scanf("%s",P+1); m=strlen(P+1); Prefix_Func(); clc=m-next[m]; if(clc==m) cout<
<

 

转载于:https://www.cnblogs.com/zn505119020/p/3571284.html

你可能感兴趣的文章
【转】一个孩子关于MaD的思考概述
查看>>
C 再识数组指针 指针数组的概念
查看>>
第5次作业
查看>>
倒计时
查看>>
JAVA必会算法--选择排序
查看>>
SEO基础问题:13.什么是关键词密度?
查看>>
Ruby gem install mysql 错误解决
查看>>
坑!!!
查看>>
web前端性能优化
查看>>
java基础-数组的折半查找原理
查看>>
挑战JavaScript正则表达式每日两题(2)
查看>>
个人网盘倒下去 企业网盘顶起来
查看>>
Redis的多种启动方式比较!
查看>>
C#读取excel文件数据丢失问题
查看>>
我的编程知识库
查看>>
【Linux实用技术】LFS6.3构建实录
查看>>
js实现页面跳转的几种方式
查看>>
块代码编程---开始使用块代码
查看>>
ASP.NET 发邮件方法
查看>>
分享:Arcadia 0.12.1 发布,Ruby 集成开发环境
查看>>