字符串左移包含问题

来源:互联网 发布:js中鼠标点击图片放大 编辑:程序博客网 时间:2024/05/16 07:19
给定两个字符串s1和s2,要求判定s2是否能够被通过s1作循环移位得到的字符串包含。例如,s1=AABCD和s2=CDAA,返回true;给定s1=ABCD和s2=ACBD,返回false。容易得,我们可以利用双重循环,对s1进行循环移位,判断字符串是否包含,遍历其所有的可能性。但是,我们观察移位后的结果,对s1移位后,其几种结果必包含于s1s1中,即AABCDAABCD,所以只需要判断s2是否包含于s1s1中即可。
//字符串左移位包含 #include <stdio.h>#include <string.h>#include <stdlib.h>bool match1(char* str1, char* str2)       //方法一,采用双重循环遍历 {    int len = strlen(str1);    for(int i = 0; i < len; ++i)    {        char tem = str1[0];        for(int j = 0; j < len - 1; ++j)        {            str1[j] = str1[j + 1];          }        str1[len - 1] = tem;        if(strstr(str1, str2) != NULL)        {            printf("包含");            return true;        }    }    printf("包含");    return false;}bool match2(char* str1, char* str2)         //方法二,其中tem为s1s1 {    char* tem = (char*)malloc(2 * sizeof(str1));    strcpy(tem, str1);    strcat(tem,str1);    if(strstr(tem, str2) != NULL)    {        printf("包含");           return true;    }    printf("不包含");    return false;}int main(){    char str1[] = "AUCD";    char str2[] = "CDA";    match1(str1, str2);    match2(str1, str2);    return 0;}
0 0
原创粉丝点击