拓展KMP算法
来源:互联网 发布:机器人c语言编程实例 编辑:程序博客网 时间:2024/06/04 18:44
拓展kmp算法
刚开始看的时候有点看不懂,主要是拓展KMP这里的next数组和KMP算法中的next数组是不一样的
这里是我的代码模板:
#include<bits/stdc++.h>using namespace std;const int MAX_N = 1e5+9; // 字符串长度最大值int nxt[MAX_N] , ext[MAX_N];char t[27],tran[27],vec1[MAX_N],vec2[MAX_N];void get_next(char * str){ memset(nxt,0,sizeof(nxt)); int num=0,j,po = 1, len = strlen(str); nxt[0] = len; while(str[num+1] == str[num] && num+1 < len) num++; // 计算next[1]; nxt[1] = num; // next[po] + po == P for(int i=2 ;i<len;i++) { if(nxt[i-po]+i<nxt[po] + po) nxt[i] = nxt[i-po]; else { j = nxt[po] + po - i; if(j<0) j=0; while(i+j < len && str[j] == str[i+j]) j++; nxt[i] = j; po = i; } }}void ekmp(char * s1,char *s2){ int num =0,j,po,len=strlen(s1),l2 = strlen(s2); get_next(s2); while(s1[num]==s2[num] && num<len && num<l2) num ++; ext[0] = num ; po = 0; //这里是0,因为get_next里面是两个相同的字符串,而这里是不同的字符串 for(int i=1;i<len;i++) { if(nxt[i-po]+i < ext[po]+po) ext[i] = nxt[i-po]; else { j = ext[po]+po-i; if(j<0) j=0; while(i+j<len && j<l2 && s1[i+j] == s2[j]) j++; ext[i] = j; po = i; } }}int main(){ int N,M,T; //freopen("in.txt","r",stdin); cin>>T; while(T--) { cin>>t>>vec1; int len = strlen(vec1); for(int i=0;i<26;i++) tran[t[i]-'a']=i+'a'; for(int i=0;i<(len+1)/2;++i) vec2[i]=tran[vec1[i]-'a'];//将密文转换为明文,密文长度>=明文长度 for(int i=(len+1)/2;i<=len;i++) vec2[i]=vec1[i]; get_next(vec2); int ans ; for(ans=(len+1)/2;ans<len;ans++) { if(nxt[ans] == len - ans) break; } cout<<vec1; for(int i=len-ans;i<ans;i++) cout<<tran[vec1[i]-'a']; cout<<endl; } return 0;}
阅读全文
0 0
- kmp算法及其拓展
- 拓展kmp算法总结
- 拓展KMP算法详解
- 拓展KMP算法
- 拓展KMP算法
- 拓展kmp算法总结
- KMP (KMP+拓展KMP)算法总结
- KMP算法&拓展KMP算法模板
- hdu 4333 Revolving Digits 拓展kmp算法
- 【拓展kmp】
- 拓展kmp
- 拓展KMP
- kmp&&拓展kmp
- BZOJ 3670 浅谈KMP算法的拓展应用
- Best Reward +拓展KMP
- HDU 4763 拓展KMP
- 拓展kmp模板
- kmp板子及其拓展
- 常用权限依赖
- QueryUnLoad->Unload->Terminate
- StringBuffer类
- js中间隔一段时间打印数组中的值
- "On branch master Your branch is ahead of 'origin/master' by 2 commits. (use "git push" to ..."解决
- 拓展KMP算法
- mac下简单配置Tomcat
- sudo命令用其他身份来执行命令,限制root远程登录详解
- jquery中$.ajax提交form文件
- Hive导入10G数据的测试
- 项目小案例画一个进度条,中间还有进度的百分比
- 阿里云配置nginx反向代理tomcat
- 三角形的判定
- Ubuntu 16.04 安装Pycharm