willsun888
9/16/2013 - 2:25 AM

给定两个字符串S1和S2,要求判断S2能否被S1做循环移位得到的字符串包含。例如:s1=AABCD和S2=CDAA,返回true, s1=ABCD和s2=ACBD,返回false。

给定两个字符串S1和S2,要求判断S2能否被S1做循环移位得到的字符串包含。例如:s1=AABCD和S2=CDAA,返回true, s1=ABCD和s2=ACBD,返回false。

int strcontain(const char* const str1, const char* const str2){
    if(NULL == str1 || NULL == str2)
        return 0;
        
    int len1, len2, i;
    char* tmp = NULL;
    len1 = strlen(str1);
    len2 = strlen(str2);
    
    if(len2 > len1)
        return 0;
        
    tmp = (char*)malloc(len1 * 2);
    memset(tmp, 0, len1*2);
    strcpy(tmp, str1);
    
    for(i = 0; i < len1; i++){
        if(strncmp(tmp + i, str2, len2) == 0){
            free(tmp);
            tmp = NULL;
            return 1;
        }
        tmp[len1 + i] = str1[i];
    }
    
    free(tmp);
    tmp = NULL;
    return 0;
}