zoukankan      html  css  js  c++  java
  • 【HDU 2203】亲和串

    题意

    给你一个字符串s1,字符串s2,s1循环移位,使s2包含在s1中,则s2 是s1的亲和串

    分析

    把s1自身复制一遍接在后面。

    方法一: 用strstr函数。

    方法二: KMP算法。

    方法三: 用C++的string的find函数。

    代码

    方法一:

    #include<cstdio>
    #include<cstring>
    char s1[200009],s2[100009];
    int len;
    int main()
    {
        while(~scanf("%s",&s1))
        {
            len=strlen(s1);
            
            for(int i=0; i<len; i++)
                s1[len+i]=s1[i];
                
            scanf("%s",&s2);
            
            if(strstr(s1,s2)-s1>=0) printf("yes
    ");
            else printf("no
    ");
            
            memset(s1,0,sizeof(s1));
            memset(s2,0,sizeof(s2));
        }
        return 0;
    }

    方法二:

    #include<cstdio>
    #include<cstring>
    char S[200005],T[100005];
    int next[100005],len;
    
    void getNext(){
        int i,k=-1;
        next[0]=k;
        for(i=1;T[i];i++){
            while(k>=0 && T[i]!=T[k+1]) k=next[k];
            if (T[i]==T[k+1]) k++;
            next[i]=k;
        }
    }
    
    int KMP(){
        int i=0,j=0;
        while(i==-1||S[j]&&T[i]){
            if(i==-1||S[j]==T[i]){
                i++;
                j++;
            }else
                i=next[i];
        }
        if(!T[i])
            return j-i+1;
        return -1;
    }
    
    int main()
    {
        while(~scanf("%s",S))
        {
            len=strlen(S);
            for(int i=len;i<2*len;i++)
                S[i]=S[i-len];
    
            scanf("%s",T);
            getNext();
            if(KMP()<0) printf("no
    ");
            else printf("yes
    ");
            memset(S,0,sizeof(S));
            memset(T,0,sizeof(T));
        }
        return 0;
    }

    方法三

    #include<iostream>
    using namespace std;
    
    int main()
    {
        string P,T;
        while(cin>>P>>T)
        {
            P+=P;
            if(P.find(T)!=string::npos)cout<<"yes"<<endl;
            else cout<<"no"<<endl;
        }
        return 0;
    }
  • 相关阅读:
    Springboot演示小Demo
    快速构建一个 Springboot
    javase练习题--每天写写
    javase练习题
    WebDriver API——延时操作及元素等待
    WebDriver API——javascript的相关操作
    Jenkins安装部署及tomcat的入门介绍
    WebDriver API——鼠标及键盘操作Actions
    sql查询练习
    睡前反省,絮叨絮叨
  • 原文地址:https://www.cnblogs.com/flipped/p/5189306.html
Copyright © 2011-2022 走看看