前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【HDU 2203】亲和串

【HDU 2203】亲和串

作者头像
饶文津
发布2020-06-02 11:38:50
2330
发布2020-06-02 11:38:50
举报
文章被收录于专栏:饶文津的专栏饶文津的专栏

题意

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

分析

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

方法一: 用strstr函数。

方法二: KMP算法。

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

代码

方法一:

代码语言:javascript
复制
#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\n");
        else printf("no\n");
        
        memset(s1,0,sizeof(s1));
        memset(s2,0,sizeof(s2));
    }
    return 0;
}

方法二:

代码语言:javascript
复制
#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\n");
        else printf("yes\n");
        memset(S,0,sizeof(S));
        memset(T,0,sizeof(T));
    }
    return 0;
}

方法三

代码语言:javascript
复制
#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;
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2016-02-14 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 题意
  • 分析
  • 代码
    • 方法一:
      • 方法二:
        • 方法三
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档