HDU-2203-亲和串-kmp算法
来源:互联网 发布:fsfr1700xsl数据手册 编辑:程序博客网 时间:2024/05/16 06:29
亲和串
Problem Description
人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现,现在长大了却不知道怎么去判断亲和串了,于是他只好又再一次来请教聪明且乐于助人的你来解决这个问题。
亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。
Input
本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二行包含输入字符串s2,s1与s2的长度均小于100000。
Output
如果s2是s1的亲和串,则输出"yes",反之,输出"no"。每组测试的输出占一行。
Sample Input
AABCDCDAAASDASDF
Sample Output
yesno
#include <iostream>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 100010;char s1[N*2], s2[N];int nt[N];void getnt(){ int i = 0, j = - 1; nt[0] = -1; while(s2[i]) { if(j == -1 || s2[i] == s2[j]) { i++, j++; if(s2[i] != s2[j]) nt[i] = j; else nt[i] = nt[j]; } else j = nt[j]; }}bool kmp(){ getnt(); int i = 0, j = 0; while(s1[i]) { if(j == -1 || s1[i] == s2[j]) i++, j++; else j = nt[j]; if(j != -1 && !s2[j]) return true; } return false;}int main(){ while(~ scanf("%s", s1)) { scanf("%s", s2); int len = strlen(s1); for(int i = len; i < len * 2; i++) s1[i] = s1[i-len]; s1[len*2] = '\0'; if(kmp()) printf("yes\n"); else printf("no\n"); } return 0;}
阅读全文
0 0
- hdu 2203 亲和串 KMP算法
- HDU 2203亲和串 kmp算法
- HDU-2203-亲和串-kmp算法
- KMP hdu-2203-亲和串
- HDU 2203 亲和串 KMP
- hdu 2203 亲和串 kmp
- hdu 2203 亲和串(KMP)
- 亲和串 - HDU 2203 KMP
- 【HDU】2203 亲和串 KMP
- HDU 2203(KMP) 亲和串
- HDU 2203 亲和串 (KMP)
- hdu 2203 亲和串 KMP
- HDU - 2203 亲和串(Kmp)
- HDU 2203 亲和串 KMP
- KMP算法 2203 亲和串
- hdu 2203 亲和串(KMP|strstr())
- HDU 2203 亲和串(KMP:循环移位)
- HDU 2203 亲和串 KMP解法
- 主机与虚拟机之间互传文件
- 数据分析之《菜鸟侦探挑战数据分析》-R语言
- 模板的分离编译
- SQL Server 不存在或访问被拒绝 --以及解决方法
- Android—导航页的简单实现
- HDU-2203-亲和串-kmp算法
- React boil
- 机器学习笔记二:监督学习应用:梯度下降
- 年终总结最全攻略-来自人民日报
- 使用python监控linux 系统运行状态
- SDUT-oj 小学数学
- OAuth协议
- HDU 3535 AreYouBusy(多重背包模板)
- 利用MATLAB进行人脸识别