zoukankan      html  css  js  c++  java
  • 《编程之美》字符串移位包含的问题

    (来自《编程之美》)

    给定两个字符串s1和s2,要求判断s2是否能够被s1做循环移位(rotate)得到的字符串包含。
    我的解法(想法比较复杂):
     1 #include<iostream> 
     2 using namespace std;        
     3 bool isCover(string s1, string s2){
     4     int len1, len2;
     5     len1 = s1.length();len2 = s2.length();
     6     if(len1 == 0 || len2 == 0 || len2>len1)
     7         return false;
     8     int startIndex = 0;
     9     while(s1[startIndex] != s2[0]){
    10         startIndex ++;
    11         if(startIndex >= len1 || startIndex >= len2)//reach the tail of s1
    12             return false;
    13     }
    14     int index1,index2;
    15     index1 = startIndex;
    16     for(index2 = 0; index2<len2; ){
    17         if(s2[index2] != s1[index1])
    18             return false;
    19         
    20         else{
    21             index1++;
    22             index2++;
    23         } 
    24         if(index1 == len1)
    25             index1 = 0;
    26     }
    27     if(index2 == len2)
    28         return true;
    29     
    30 }
    31 int main(){
    32     string str1 = "AABCD";
    33     string str2 = "CADD";
    34     string str3 = "AABCD";
    35     string str4 = "CDAA";
    36     cout<<isCover(str1, str2)<<endl;
    37     cout<<isCover(str3, str4)<<endl;
    38     return 0;
    39 }
    输出:
    第一组输出false,第二组输出true
     
    书上的解法比较简单,就是把问题简化成考察str2是否在str1str1中就行了。代码如下,两个函数分别是c风格和c++风格的:
     1 bool isCover1(char *src, char *des)
     2 {
     3     int srcLen = strlen(src);
     4     char *double_src = strcat(src,src);
     5     //返回des在double_src中第一次出现位置的指针,如果没有找到返回NULL 
     6     if(strstr(double_src, des) != NULL)
     7         cout<<true<<endl;
     8     else
     9         cout<<false<<endl;
    10 }
    11 bool isCover2(string src, string des)
    12 {
    13     string double_src = src+src;
    14     if(double_src.find(des) < double_src.length())
    15         return true;
    16     else
    17         return false;
    18 }
     
     
     
     
  • 相关阅读:
    kali linux DDos攻击
    js基础接替上回的作用域
    js基础的知识函数和作用域
    写作是最好的思考
    eclipse 常用操作(转载)
    网页中用jquery validate 验证表单输入项
    eclipse5.5添加反编译插件
    velocity 实现td 中月份的多选框
    LinckedhashMap原理
    api服务端接口安全
  • 原文地址:https://www.cnblogs.com/mooba/p/6558039.html
Copyright © 2011-2022 走看看