zoukankan      html  css  js  c++  java
  • hdu 2203 亲和串

    亲和串

    Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)
    Total Submission(s): 3732    Accepted Submission(s): 1670


    Problem Description
    人随着岁数的增长是越大越聪明还是越大越笨,这是一个值得全世界科学家思考的问题,同样的问题Eddy也一直在思考,因为他在很小的时候就知道亲和串如何 判断了,但是发现,现在长大了却不知道怎么去判断亲和串了,于是他只好又再一次来请教聪明且乐于助人的你来解决这个问题。
    亲和串的定义是这样的:给定两个字符串s1和s2,如果能通过s1循环移位,使s2包含在s1中,那么我们就说s2 是s1的亲和串。
     
    Input
    本题有多组测试数据,每组数据的第一行包含输入字符串s1,第二行包含输入字符串s2,s1与s2的长度均小于100000。
     
    Output
    如果s2是s1的亲和串,则输出"yes",反之,输出"no"。每组测试的输出占一行。
     
    Sample Input
    AABCD
    CDAA
    ASD
    ASDF
     
    Sample Output
    yes no
     
    Author
    Eddy
     
    Recommend
    lcy

    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    char str1[100000],str2[100000];
    char str[200000];
    int main()
    {
        while(scanf("%s",str1)!=EOF)
        {
            scanf("%s",str2);
            strcpy(str,str1);
            strcat(str,str1);
            if(strstr(str,str2)!=NULL)
             printf("yes\n");
            else
             printf("no\n");
        }
        return 0;
    }

    //KMP,测试了下、是0Ms,不理解上面的代码为啥也是0Ms,叫我写了半个多小时的KMP怎么办
    #include <iostream>
    #include <stdio.h>
    #include <string.h>
    #include <algorithm>
    using namespace std;
    char str1[100000],str2[100000];
    char str[200000];
    int next[100000];
    void KMP()
    {
       int i,j;
       next[0]=-1;
       i=1,j=0;
       while(str2[i]!='\0')
       { // printf("%d",i);
           if(str2[i]==str2[j])
           {
               next[++i]=++j;
               if(str2[i]==str[j])
                  next[i]=next[j];
           }
           else
           {
               j=next[j];
               if(j==-1)
                {
                    i++;
                    next[i]=0;
                    j=0;
                }
           }
       }
    }
    int main()
    {    int i,j;
         bool b;
        while(scanf("%s",str1)!=EOF)
        {
            scanf("%s",str2);
            strcpy(str,str1);
            strcat(str,str1);
            KMP();
         //   for(int i=0;i<=10;i++)
          //    printf("%d ",next[i]);
          i=j=b=0;
           while(str[i]!='\0')
             if(str[i]==str2[j])
             {
                 i++;
                 j++;
                 if(str2[j]=='\0')
                   {b=1;break;}
             }
             else
             {
                 j=next[j];
                 if(j==-1)
                 {
                     i++;
                     j=0;
                 }
             }
             if(b) printf("yes\n"); else printf("no\n");

        }
        return 0;
    }


  • 相关阅读:
    jmeter压测-05-xpath表达式
    测试那些事-测试资源篇
    测试那些事-沟通篇
    测试那些事-前端
    测试那些事儿-后端
    记一次大数据量不同处理方式下服务器负载
    jmeter压测dubbo接口,参数为dto时如何写传参及有错误时的分析思路
    pyton3 字典排序
    python测试dubbo接口
    记录一下telnet测试dubbo接口,参数为dto时怎么测试,枚举类型传参
  • 原文地址:https://www.cnblogs.com/372465774y/p/2604370.html
Copyright © 2011-2022 走看看