关闭

亲和串

340人阅读 评论(0) 收藏 举报
分类:


http://acm.hdu.edu.cn/showproblem.php?pid=2203

#include<iostream>
#include<cstring>
using namespace std;
char s1[100010],s2[100010],c[200010],next1[100010];
void getnext(char *s2,int len2)
{
 int i=0,j=-1;
 next1[0]=-1;
 while(i<len2)
 {
  if(j==-1 || s2[i]==s2[j])
  {
   i++;
   j++;
   next1[i]=j;
  }
  else
   j=next1[j];
 }
}
int main()
{//freopen("C:\\Users\\John\\Desktop\\hi.txt","r",stdin);
 int i,j,ok;
 while(cin>>s1>>s2)
 {
  memset(c,0,sizeof(c));
  ok=0;
  strcat(c,s1);
  strcat(c,s1);
  int len1=strlen(c);
  int len2=strlen(s2);
  if(len1<len2)
  {
   cout<<"no"<<endl;
   continue;
  }
  getnext(s2,len2);
  for(i=0,j=0;i<len1;)
  {
   if(j==-1 || c[i]==s2[j])
    i++,j++;
   else
    j=next1[j];
   if(j==len2)
   {
    ok=1;
    break;
   }
  }
  if(ok==1)
   cout<<"yes"<<endl;
  else
   cout<<"no\n";
 }
 return 0;
}

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:41585次
    • 积分:2002
    • 等级:
    • 排名:千里之外
    • 原创:179篇
    • 转载:29篇
    • 译文:0篇
    • 评论:2条
    最新评论