hdoj-2203亲和串(Kmp)
来源:互联网 发布:sql server没有002 编辑:程序博客网 时间:2024/06/08 06:40
亲和串
Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 16021 Accepted Submission(s): 7052
Problem Description
人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何判断了,但是发现,现在长大了却不知道怎么去判断亲和串了,于是他只好又再一次来请教聪明且乐于助人的你来解决这个问题。
亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。
亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。
Input
本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二行包含输入字符串s2,s1与s2的长度均小于100000。
Output
如果s2是s1的亲和串,则输出"yes",反之,输出"no"。每组测试的输出占一行。
Sample Input
AABCDCDAAASDASDF
Sample Output
yesno
题目链接
Kmp模板题,因为题目要求字符串的结尾可以和开头接上,所以只要查找两遍该字符串就行了。
#include <bits/stdc++.h>using namespace std;#define K 10000005int s[K];string s1,s2;void next(){ s[0]=0; for(int i=1,j=0,len=s2.length();i<len;i++) { while(j&&s2[j]!=s2[i]) j=s[j-1]; if(s2[j]==s2[i]) j++; s[i]=j; }}int kmp(){ next(); for(int i=0,j=0,lena=s1.length(),lenb=s2.length();i<lena;i++) { while(j&&s1[i]!=s2[j]) j=s[j-1]; if(s1[i]==s2[j]) j++; if(j==lenb) return 1; } return 0;}int main(){ while(cin>>s1>>s2) { s1+=s1; if(kmp()==1) printf("yes\n"); else printf("no\n"); } return 0;}
阅读全文
1 0
- hdoj-2203亲和串(Kmp)
- 【KMP】 HDOJ 2203 亲和串
- Hdoj 2203 亲和串 【KMP】
- hdoj-2203-亲和串【KMP】
- HDOJ 2203 亲和串()
- 亲和串(KMP)
- hdoj 2203 亲和串
- hdoj 2203 亲和串
- HDoj-2203-亲和串
- hdoj 2203 亲和串
- HDOJ 2203 亲和串
- hdu 2203 亲和串(KMP|strstr())
- HDU 2203 亲和串(kmp)
- 亲和串 (hdu 2203 KMP)
- hdu 2203 亲和串(kmp)
- HDU-2203 亲和串(KMP入门)
- HDU 2203 亲和串(KMP)
- hdu-2203-亲和串(KMP模板)
- 通用块层学习1 作用
- Cube Reverse
- 4
- HDOJ 2133 What day is it
- 8. 面向对象 -- 继承
- hdoj-2203亲和串(Kmp)
- 设计模式之建造者模式
- WebStorm开发React项目,修代码之后不更新
- 第8章:指针-指针变量的定义、初始化及解引用(基于哈工MOOC)
- Task Scheduler
- POJ 1088 滑雪
- 网络基础常考面试题--源自牛客网
- Git知识梳理和整合
- BeanUtils将map直接封装到对象中