KMP算法(hdu2203)

 大概的解题思路:循环移位可以靠指针来向后移动代替,循环左移和循环右移出来的结果集都是一样的,所以我选择全部向右移动。

首先找到与第一个元素相同的元素的位置,向后比较,看是否全部相同,如果全部相同者是亲和串。如果不是全相相同,则向后查找下一个与第一个元素相同的元素位置,一直下去,直到找不到这样的元素为止。

ac代码:

#include<iostream>  
#include<string>  
using namespace std;  
#define M 100000  
char s1[M],s2[M],s3[2*M];  
int main()  
{  
    while(cin>>s1)  
    {  
        cin>>s2;  
        char *p;  
        int i,len=strlen(s1);  
        strcpy(s3,s1);  
        for(i=len;i<2*len;++i)  
        s3[i]=s1[i-len];  
        p=strstr(s3,s2);  
        if(p) cout<<"yes"<<endl;  
        else  cout<<"no"<<endl;  
        memset(s1,0,sizeof(s1));  
        memset(s2,0,sizeof(s2));  
        memset(s3,0,sizeof(s3));  
    }  
}  


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值