hdu 1867 A + B for you again KMP
来源:互联网 发布:网络编程聊天室 编辑:程序博客网 时间:2024/06/06 10:34
题意:找到两个字符串最长前缀后缀匹配。比并且是输出字符串较小的。
#include <iostream>#include <cstdio>#include<limits>#include <map>#include <cstring>#include <string>#include <cstdlib>using namespace std;const int MAXN=100005;char s1[MAXN], s2[MAXN];int next1[MAXN];int next2[MAXN];void getnext(char s[], int next[]){ int i=0, j=-1; next[0]=-1; int len = strlen(s); while(i<len) { if(j==-1||s[i]==s[j]) next[++i]=++j; else j=next[j]; } return ;}int KMP(char s3[], char s4[], int next[]){ int i=0, j=0; int lena=strlen(s3), lenb=strlen(s4); while(i<lena&&j<lenb) { if(s3[i]==s4[j]||j==-1) i++, j++; else j=next[j]; } if(i==lena) return j; return 0;}int main(){ while(~scanf("%s %s", s1, s2)) { getnext(s1, next2); getnext(s2, next1); int x=KMP(s1, s2, next1); int y=KMP(s2, s1, next2); if(x>y) printf("%s%s\n", s1,s2+x); else if(x==y) { if(strcmp(s1, s2)>0) printf("%s%s\n", s2, s1+x); else printf("%s%s\n", s1, s2+x); } else printf("%s%s\n", s2,s1+y); } return 0;}
阅读全文
0 0
- hdu -- 1867 A + B for you again (KMP)
- hdu 1867——A + B for you again(KMP)
- KMP-hdu-1867 A + B for you again
- hdu 1867 A + B for you again (KMP)
- HDU 1867 A + B for you again KMP
- hdu 1867 KMP A + B for you again
- HDU 1867 A + B for you again(简单KMP)
- HDU 1867 A + B for you again (KMP)
- HDU(1867)A + B for you again (KMP)
- hdu 1867 A + B for you again (kmp)
- hdu 1867 A + B for you again kmp
- hdu 1867 A + B for you again(KMP)
- hdu 1867 A + B for you again KMP算法
- hdu 1867 A + B for you again(KMP)
- HDU 1867 A + B for you again KMP题解
- HDU 1867 A + B for you again (KMP应用)
- hdu 1867 A + B for you again (kmp扩展)
- HDU 1867--A + B for you again【KMP】
- 哈夫曼编码与压缩效率分析
- codeforces788E New task -- 线段树
- Windows下新建 .gitignore 文件出现 “必须键入文件名”
- Tomcat性能调优
- caffe过程中的错误(一)
- hdu 1867 A + B for you again KMP
- Redis之aof日志持久化
- MongoDB windows下安装以及创建windows server
- TensorFlow 中文语音识别
- KVM管理
- uva 1586 分子量
- fork源码概要分析
- RSA加密算法原理及RES签名算法简介
- Java8 lambda表达式10个示例