KMP又一小扩展 hdu1867
来源:互联网 发布:nginx ip会话保持 编辑:程序博客网 时间:2024/05/18 03:47
这个完全运用KMP模版,只不过用了两边而已,注意字典序,嗯,if判断那里着实有些...呃...代码如下:
#include <cstring>#include <stdio.h>#include <stdlib.h>#include <iostream>using namespace std;int next[100005];void build_next(string b){ int i,j=0,key=0; memset(next,0,sizeof(next)); for(i=1;i<b.size();i++) { j=next[i-1]; while(j==1 && b[i]!=b[j]) { j=next[j-1]; } if(b[j]==b[i]) { next[i]=j+1; } else next[i]=0; }}int KMP_Find(string s,string t) //pos从0开始,输出绝对位置要加1 {build_next(t);int i=0;int j=0;for(i=0;i<s.size();i++){while(j>0 && s[i]!=t[j]){j=next[j-1];}if(s[i]==t[j]){j++;}else{j=0;}}return j;}int main(){string s,t;while(cin>>s>>t){int a=s.size();int b=t.size();int x,y;x=KMP_Find(s,t);y=KMP_Find(t,s); if(x==y) { if(s>t) { cout<<t; for(int i=x;i<a;i++) cout<<s[i]; cout<<endl; } else { cout<<s; for(int i=x;i<b;i++) cout<<t[i]; cout<<endl; } } else if(x>y) { cout<<s; for(int i=x;i<b;i++) cout<<t[i]; cout<<endl; } else { cout<<t; for(int i=y;i<a;i++) cout<<s[i]; cout<<endl; }}return 0;}
- KMP又一小扩展 hdu1867
- hdu1867 KMP
- hdu1867(kmp)
- hdu1867之KMP
- HDU1867-KMP算法的应用
- 【KMP】 hdu1867 A + B for you again
- hdu1867 A + B for you again KMP
- hdu1867 A + B for you again (KMP)
- HDU1867 - A + B for you again(KMP)
- HDU1867:A + B for you again(KMP)
- hdu1867 A + B for you again(kmp)
- HDU1867:A + B for you again【kmp】
- hdu1867
- hdu1867
- hdu1867
- hdu1867
- HDU1867 A + B for you again KMP应用
- 【hdu1867】A + B for you again——KMP
- 爆笑
- 黑马程序员_异常总结
- 免费编程入门教程资源推荐搜集,分享给想开始学习程序开发的同学
- 关于跨网段建立TCP连接的思考
- 安全外壳协议SSH详解
- KMP又一小扩展 hdu1867
- 【解惑】 中断线程Interrupted的用处
- 获取当月的天数。
- 你不是真正的快乐---纪念即将完结的青春和陪伴我的阿星和星仔和星爷
- fckeditor组件使用---fckeditor调用的三种方法1
- UIFont
- uml的构成
- 受检异常和非受检异常
- PageControl实现页面之间的跳转