zoukankan      html  css  js  c++  java
  • 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()函数源码

     

  • 相关阅读:
    HDU 1978 How many ways
    hdu 1966 Pie
    hdu 1966 Pie
    HDU 1896 Stones
    HDU 1896 Stones
    hdu 1278 逃离迷宫
    hdu 1278 逃离迷宫
    HDU 2548 A strange lift
    HDU 2548 A strange lift
    PHP 错误与异常 笔记与总结(10)错误处理器测试
  • 原文地址:https://www.cnblogs.com/techyc/p/2695149.html
Copyright © 2011-2022 走看看