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));  
    }  
}  


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章