HDU2594 Simpsons’ Hidden Talents KMP
2016-03-26 13:52
375 查看
题意:给你两个字符串,问你第一个字符串前缀和第二个字符串的后缀最长匹配长度是多少?
思路: 简单的next数组的理解, 连接两字符串,在连接处加一个无关字符,如‘*’,这样做是为了保证不会出现连接后前后缀最大匹配值大于某个字符串的情况,然后直接输出next[strlen(str)]以及其前缀即可。
代码如下:
思路: 简单的next数组的理解, 连接两字符串,在连接处加一个无关字符,如‘*’,这样做是为了保证不会出现连接后前后缀最大匹配值大于某个字符串的情况,然后直接输出next[strlen(str)]以及其前缀即可。
代码如下:
#include <bits/stdc++.h> using namespace std; const int maxn=50005; char p[maxn<<1]; char p1[maxn]; int NEXT[maxn<<1]; void Op_NEXT(int n){ NEXT[0] = -1; int k = -1; int j = 0; while(j < n){ if(k == -1 || p[k] == p[j]){ j++; k++; NEXT[j] = k; } else{ k=NEXT[k]; } } } int main() { ios::sync_with_stdio(false); memset(NEXT,0,sizeof(NEXT)); while(cin>>p>>p1){ int len1=strlen(p); int len2=strlen(p1); strcat(p,p1); int len=len1+len2; Op_NEXT(len); while(NEXT[len]>len1 || NEXT[len]>len2) len=NEXT[len]; int res=NEXT[len]; if(res){ for(int i=0;i<res;i++) cout<<p[i]; cout<<" "<<res<<endl; } else { cout<<res<<endl; } } return 0; }
相关文章推荐
- 阿里巴巴校招内推一面总结
- UWP中弹出框屏幕适配问题
- 最大子数组一
- C++第2次实验-学生成绩
- 在杭州的小屋
- Kubernetes安装部署
- 汇编级代码优化
- Okhttp封装、网络层扩展
- onActivityForResult不执行
- 王学岗ListView和源码解析(二)
- Windows下IPython的配置安装
- tomcat性能调优 大赞
- Mysql To Charts(四)--draw ichartjs
- 纯JS省市区三级联动
- 学习go语言的第6天(总结昨天)
- WHY IE AGAIN? - string.charAt(x) or string[x]?
- html第七节课
- MinGW平台 openjpeg-2.1.0 静态编译后未定义引用的解决方法
- C 随机数产生
- 大话设计模式—模板方法模式