zoukankan      html  css  js  c++  java
  • 字符串移位包含的问题

    #include<iostream>
    using namespace std;
    
    //method1
    /*
    最直接的方法就是对src进行循环移位,再进行字符串包含的判断,从而遍历其所有的可能性。
    时间复杂度为O(N^2)
    */
    bool isContain(char* src,char* des)
    {
         int len=strlen(src);
      for(int i=0;i<len;i++)
      {
           char temp=src[0];
        for(int j=0;j<len-1;j++)
        {
            src[j]=src[j+1];
        }
        src[len-1]=temp;
        if(strstr(src,des))
        {
            return true;
        }
      }
      return false;
    }
    
    //method2
    /*
    假设我们把前面移走的数据进行保留,会发现有如下的规律
    ABCD->ABCDA->ABCDAB->ABCDABC->ABCDABCD
    可以看出对s1做循环移位所得到的字符串都将是字符串s1s1的子字符串。如果s2可以由s1循环移位得到,那么s2一定在s1s1上。
    至此我们将问题转换成考察s2是否在s1s1上,可通过调用一次strstr函数得到结果。以空间换时间,时间复杂度为O(1)
    */
    bool isContain2(char* src,char* des)
    {
         int len=strlen(src);
      char* src2=new char[2*len+1];
         for(int i=0;i<2*len;i++)
      {
          src2[i]=src[i%len];
      }
      src2[2*len]='\0';
      if(strstr(src2,des))
      {
          return true;
      }
      return false;
    }
    int main()
    {
          char src[]="AABBCD";
       char des[]="CDAA";
       
       bool value=isContain2(src,des);
          if(value)cout<<"包含"<<endl;
       else cout<<"不包含"<<endl;
      
          value=isContain(src,des);
       if(value)cout<<"包含"<<endl;
       else cout<<"不包含"<<endl;
       
       system("pause");
       return 0;
    }
    

      

  • 相关阅读:
    项目部署工具之walle
    Windows下的终端工具-Terminal
    golang之基础语法
    git之常见问题
    vue之项目部署
    技术电子书汇总
    clickhouse之安装与基本使用
    nginx配置之Gzip压缩
    Selenium登录验证码解决方案细解
    Python Selenium自动化测试PO设计模式实战
  • 原文地址:https://www.cnblogs.com/yanglf/p/2758811.html
Copyright © 2011-2022 走看看