CareerCup它1.8 串移包括问题

CareerCup它1.8 串移包括问题

大家好,又见面了,我是全栈君,今天给大家准备了Idea注册码。

【称号】

原文:

1.8 Assume you have a method isSubstring which checks if one word is a substring of another. Given two strings, s1 and s2, write code to check if s2 is a rotation of s1 using only one call to isSubstring ( i.e., “waterbottle” is a rotation of “erbottlewat”).

译文:

如果你有一个isSubstring函数,能够检測一个字符串是否是还有一个字符串的子串。 给出字符串s1和s2。仅仅使用一次isSubstring就能推断s2是否是s1的旋转字符串, 请写出代码。旋转字符串:”waterbottle”是”erbottlewat”的旋转字符串。

【分析】

我们也能够对循环移位之后的结果进行分析。
以S1 = ABCD为例,先分析对S1进行循环移位之后的结果,例如以下所看到的:
ABCD—>BCDA—->CDAB—->DABC—->ABCD……
如果我们把前面的移走的数据进行保留。会发现有例如以下的规律:
ABCD—>ABCDA—->ABCDAB—->ABCDABC—->ABCDABCD……
因此,能够看出对S1做循环移位所得到的字符串都将是字符串S1S1的子字符串。

假设S2能够由S1循环移位得到,那么S2一定在S1S1上,这样时间复杂度就减少了。

相同题目:编程之美之字符串移位包括问题

【代码一】

/*********************************
*   日期:2014-5-15
*   作者:SJF0115
*   题号: 字符串移位包括问题
*   来源:CareerCup
**********************************/
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

bool isSubstring(char* str1,char* str2){
    if(str1 == NULL || str2 == NULL){
        return false;
    }
    if(strstr(str1,str2) != 0){
        return true;
    }
    return false;
}

bool IsRotate(char* str1,char* str2){
    int i,j;
    if(str1 == NULL || str2 == NULL){
        return false;
    }
    int len1 = strlen(str1);
    char* str3 = new char(len1*2+1);
    strcpy(str3,str1);
    strcat(str3,str1);
    //str3 = str1+str1
    if(isSubstring(str3,str2)){
        return true;
    }
    return false;
}

int main(){
    char str1[6] = "AABCD";
    char str2[5] = "CDAA";
    bool result = IsRotate(str1,str2);
    cout<<result<<endl;
    return 0;
}

【代码二】

/*********************************
*   日期:2014-5-15
*   作者:SJF0115
*   题号: 字符串移位包括问题
*   来源:CareerCup
**********************************/
#include <iostream>
#include <stdio.h>
#include <string.h>
using namespace std;

bool isSubstring(string str1,string str2){
    if(str1.find(str2) != string::npos) {
        return true;
    }
    return false;
}

bool IsRotate(string str1,string str2){
    string str3 = str1+str1;
    if(isSubstring(str3,str2)){
        return true;
    }
    return false;
}

int main(){
    string str1 = "apple";
    string str2 = "pleap";
    bool result = IsRotate(str1,str2);
    cout<<result<<endl;
    return 0;
}

版权声明:本文博客原创文章,博客,未经同意,不得转载。

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/117665.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • oracle12c下载地址_oracle 11g下载

    oracle12c下载地址_oracle 11g下载oracle下载地址https://www.oracle.com/database/technologies/database12c-win64-downloads.html

    2025年8月5日
    4
  • mysql配置环境变量(win 10)[通俗易懂]

    1、安装完mysql后就需要配置环境变量(win10)选择“我的电脑”,单击右键,选择“属性-&gt;高级-&gt;环境变量中的系统变量,对MYSQL_HOME、Path这2个系统变量分别设置如下相应的值(设置原则:如果存在相应的变量,直接对该变量进行编辑,注意只添加不删除;如果该变量不存在,则新建后再编辑。)这里由于没有于是就新建一个环境变量MYSQL_HOM MYSQL_H…

    2022年4月4日
    120
  • 浅析 PHP7 底层运行机制[通俗易懂]

    浅析 PHP7 底层运行机制

    2022年2月11日
    46
  • linux openssl制作ssl证书_openssl生成自签名证书 c++代码

    linux openssl制作ssl证书_openssl生成自签名证书 c++代码目录前言1概念2环境3创建根证书CA4颁发证书4.1在需要证书的服务器上,生成证书签署请求4.2在根证书服务器上,颁发证书5测试5.1读取test.pfx文件5.2读取test.cer文件前言最近,被分配了一个任务,完成数字证书管理系统的开发,一开始我是一脸懵逼的,因为以前我对于什么数字证书都没了解过,可谓了一片空白,也不知其是用来…

    2026年1月27日
    3
  • 区块链:P2P技术是什么

    区块链:P2P技术是什么摘要:包括比特币、以太坊等在内的去中心化的区块链平台,其底层网络都是采用的P2P技术实现,每个节点都是对等的。而本文,则先通过介绍P2P技术的特点和发展历史,让大家对P2P这个技术的来龙去脉有一个初步的认识和了解。然后在下一篇文章中,我会详细介绍第三代P2P技术(DHT)—Kademlia算法的实现原理。1.p2p的定义P2P是peer-to-peer的简称,又称为点对点技…

    2022年6月19日
    27
  • Louvain算法_算法问题

    Louvain算法_算法问题Louvain算法一种基于模块度的图算法模型,与普通的基于模块度和模块度增益不同的是,该算法速度很快,而且对一些点多边少的图,进行聚类效果特别明显。算法流程:1、初始时将每个顶点当作一个社区,社区个数与顶点个数相同。2、依次将每个顶点与之相邻顶点合并在一起,计算它们的模块度增益是否大于0,如果大于0,就将该结点放入该相邻结点所在社区。3、迭代第二步,直至算法稳定,即所有顶点所属社区不再变…

    2025年7月21日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号