【HDU 3746 KMP之next】
来源:互联网 发布:高清网络摄像机方案 编辑:程序博客网 时间:2024/06/03 22:46
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=3746
注意理解:
next[ ]存的是前缀和后缀的最大匹配值,
length=len-next[], 是循环节。
len%(len-next[])==0
为最大循环节。
length - next[len] % length就是需要添加的字符个数。
总的表达式就是:
len-next[len]-(len%(len-next[len]))
#include<iostream>#include<cstdio>#include<cstring>using namespace std;char s[100005];int next[100005];void getnext(char *s,int *next){ int len=strlen(s); int i=0,j=-1; next[0]=-1; while(i<len){ if(j==-1 || s[i]==s[j]){ i++; j++; next[i]=j; } else j=next[j]; }}int main(){ int test; scanf("%d",&test); while(test--){ scanf("%s",s); getnext(s,next); int len=strlen(s); int length,add; length = len - next[len]; //循环节的长度 if(len != length && len % length == 0) //循环多次 printf("0\n"); else { add = length - next[len] % length; //取余的作用:abcab,去掉abc printf("%d\n",add); } /* if(next[len]>0 && len%(len-next[len])==0) printf("0\n"); else printf("%d\n",len-next[len]-(len%(len-next[len]))); */ }}
- 【HDU 3746 KMP之next】
- hdu 3746 KMP next数组的应用
- HDU 3746(KMP)next数组的运用
- KMP之next
- KMP之next总结
- KMP之Next数组
- kmp 之 next数组
- hdu 3336 KMP之杭电next灵魂
- hdu 3336 KMP之杭电next灵魂
- hdu 1358 Period(KMP之next数组)
- hdu 3746 kmp next求最小循环节
- HDU-3746 Cyclic Nacklace (活用KMP中next数组)
- KMP之获取next表。
- kmp算法之next数组
- 【POJ 2752 KMP之next】
- Node:KMP之next数组
- HDU 3746 数据结构之KMP
- hdu-4763 kmp next数组的应用
- litezip学习(WINDOW下的轻量级压缩库)
- Sharing Data Locally between ios apps
- linux下配置Nginx+双tomcat负载均衡
- visuall assist x 破解方法
- web service useful link
- 【HDU 3746 KMP之next】
- java加密
- oracle 11g数据库+pl/sql developer 组合的安装及配置过程
- how to make dword with high/low word or high/low byte
- 淘宝 叔度高性能服务器开发相关资料
- copy 的实现原理与深浅拷贝
- java学习
- JavaScript 判断用户输入的格式是否正确
- 通用GPIO模拟串口,提供源代码,本人经过测试OK。(第一版)