博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cyclic Nacklace HDU - 3746 (kmp next数组应用)
阅读量:4986 次
发布时间:2019-06-12

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

题目大意

给出字符串,寻找最小要补全的字符个数,使得字符串是两次的循环

解法

通过寻找规律,我们又发现了len-next[len]又派上了用场

①如果next[len]是0,说明最大前缀后缀和为0,那么这个串里面没有什么重复的那种部分,也就是输出len例如abcde

②如果len%(len-next[len])==0也就是说里面已经具有这种重复两次的串了,所以输出0,例如aaa

③如果上述情况都不是,那么说明这个串里面包含重复部分但是不全。那么输出的公式是(len-next[len[)-len%(len-next[len])

对于③的简单图示(存在一定的比例的问题。。。)

1499683-20181130113238791-1825022163.png

代码

#include 
using namespace std;char a[100005];int nex[100005];int len;void get(){ memset(nex,0,sizeof(nex)); int j=0; for(int i=2;i<=len;i++) { while(j&&a[i]!=a[j+1]) j=nex[j]; if(a[i]==a[j+1]) j++; nex[i]=j; }}int main(){ ios::sync_with_stdio(0); cin.tie(0); cout.tie(0); int n; cin>>n; while(n--) { cin>>a+1; len=strlen(a+1); get(); int t1=len-nex[len]; if(nex[len]==0) cout<
<<"\n"; else if(len%t1==0) cout<<0<<"\n"; else cout<
<<"\n"; }}

转载于:https://www.cnblogs.com/baccano-acmer/p/10043214.html

你可能感兴趣的文章
Leetcode 374. Guess Number Higher or Lower
查看>>
统计学习方法一:基础
查看>>
2018-2019-1 20165236 《信息安全系统设计基础》第一周学习总结
查看>>
Jmeter-添加自定义函数
查看>>
每个Java程序员需要了解的8个Java开发工具
查看>>
【转】【Android】事件输入系统-代码层次解读
查看>>
WebMisSharp的协同开发
查看>>
ios 集成react native
查看>>
【Alpha】Scrum Meeting 6
查看>>
localhost、127.0.0.1、192.168.xx.xx 的区别
查看>>
实现画茶壶,圆环,盒子,球体
查看>>
HTML特殊转义字符对照表
查看>>
http协议和web本质
查看>>
黑客教父郭盛华:大数据时代,黑客渗透测试工程师有多重要?
查看>>
Extjs中GridPanel的各个属性与方法
查看>>
2019春第六周作业
查看>>
ServiceFabric极简文档-1.3删除群集
查看>>
EXT2 文件系统(转)
查看>>
.NET - 代码重构技巧
查看>>
EasyUI - DataGrid 组建 - [ 搜索功能 ]
查看>>