给定两个字符串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()函数源码

 

相关文章:

  • 2022-12-23
  • 2022-12-23
  • 2021-11-20
  • 2021-06-14
  • 2021-07-07
  • 2022-01-19
  • 2021-08-08
  • 2021-10-15
猜你喜欢
  • 2021-09-09
  • 2021-09-11
  • 2021-08-13
  • 2022-01-24
  • 2021-05-21
  • 2022-12-23
  • 2022-12-23
相关资源
相似解决方案