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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了c_cpp 给定两个字符串S1和S2,要求判断S2能否被S1做循环移位得到的字符串包含。例如:s1 = AABCD和S2 = CDAA,返回true,s1 = ABCD和s2 = ACBD,返回fal相关的知识,希望对你有一定的参考价值。

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

以上是关于c_cpp 给定两个字符串S1和S2,要求判断S2能否被S1做循环移位得到的字符串包含。例如:s1 = AABCD和S2 = CDAA,返回true,s1 = ABCD和s2 = ACBD,返回fal的主要内容,如果未能解决你的问题,请参考以下文章

2021-06-11:给定两个字符串s1和s2,问s2最少删除多少字符可以成为s1的子串? 比如 s1 = “abcde“,s2 = “axbc“。

2021-11-25:给定两个字符串s1和s2,返回在s1中有多少个子串等于s2。来自美团。

翻转子串

第三章结构之法--------字符串移位包含

数组与字符串:翻转子串

Leetcode 567.字符串的排列