1. 程式人生 > >HDU 2203 親和串 題解

HDU 2203 親和串 題解

由題意得:

1.輸入兩組字串,第一組為父串,第二組為子串

2..因為是父串迴圈移位,所以字串的不能出現類似第一位字元與第三位字元換位的情況

3.既然如此,那就再複製一份父串,添在原父串後面,使父串延長一倍。這樣,在新的父串裡面就會出現原父串迴圈移位出現的任何情況

4.如果子串在新父串中能找到首次出現的地址,就說明輸入的兩組字串是親和串;若找不到,就不是。當然如果,子串長度大於父串就肯定不是親和串

5.程式碼如下:

#include<iostream>
#include<cstring>
const int MAXN = 100000;
char s1[MAXN+1],s2[MAXN],s3[2*MAXN+1];
using namespace std;

int main()
{
    char *p;
    while(cin>>s1>>s2)
    {
        if(strlen(s1)<strlen(s2))
            cout << "no" << endl;
        else
        {
            strcpy(s3, s1);
            strcat(s3, s1);
            p = strstr(s3, s2);
            if(p) cout << "yes" << endl;
            else cout << "no" << endl;
        }
    }
    return 0;
}