3.1 字符串移位包含的问题

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

 

思路:最直接的方法是循环移位s1,遍历s1并判断是否包含s2。但这种方法效率不高。经书本提示,问题可转换为判断s1+s1是否包含s2,从而解决循环移位所需的时间。

 

 1 bool rotate(char *str,char *des){
 2     int len = strlen(str)*2;
 3     char *result = new char(len);
 4 
 5     strcpy(result,str);
 6     strcat(result,str);
 7 
 8     for(int i=0;i<len;i++){
 9         cout<<result[i]<<endl;
10     }
11 
12     if(strstr(result,des)){
13         return true;
14     }
15 
16     return false;
17 
18 }
19 
20 int _tmain(int argc, _TCHAR* argv[])
21 {
22     char str[6] = "AABCD";
23     char des[5] = "CDAA";
24     rotate(str,des);
25 }

此问题虽难度不大,但可以引出下列知识点:

KMP匹配

字符串相似度问题

strstr()函数源码

 

原文地址:https://www.cnblogs.com/techyc/p/2695149.html