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 }
     
     
     
     
  • 相关阅读:
    Vue(小案例_vue+axios仿手机app)_go实现退回上一个路由
    nyoj 635 Oh, my goddess
    nyoj 587 blockhouses
    nyoj 483 Nightmare
    nyoj 592 spiral grid
    nyoj 927 The partial sum problem
    nyoj 523 亡命逃窜
    nyoj 929 密码宝盒
    nyoj 999 师傅又被妖怪抓走了
    nyoj 293 Sticks
  • 原文地址:https://www.cnblogs.com/mooba/p/6558039.html
Copyright © 2011-2022 走看看