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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • C++ 字符串分割

    C++ 字符串分割C++中经常需要对字符串按照指定字符或字符串进行分割操作以获得子串。下面给出具体实现。版本一://qsort函数需要的比较函数,按照升序排序intcomp(constvoid*a,constvoid*b){ return*(int*)a-*(int*)b;}//按指定分隔符分割字符串//src:源字符串delimiter:分隔符集合vector<string&…

    2022年6月12日
    31
  • 用Matlab筛选mirbase,一种基于miRBase数据库的无参的miRNA数据分析方法与流程

    用Matlab筛选mirbase,一种基于miRBase数据库的无参的miRNA数据分析方法与流程本发明涉及转录组测序领域,具体涉及一种在miRBase数据库中无本物种参考miRNA数据的miRNA测序的数据分析方法。背景技术:miRNA是一类由内源基因编码非编码单链RNA分子,在动植物中参与转录后基因表达调控。多数miRNA以单拷贝、多拷贝或基因簇的形式存在于基因组中。miRNA在很多物种中被广泛发现,且在进化进程中高度保守,因此研究miRNA的确切功能、目的靶基因、以及其作用机制,是转录组…

    2022年10月25日
    0
  • 数组和链表的区别和优缺点总结!

    数组和链表的区别和优缺点总结!数组和链表是两种基本的数据结构,他们在内存存储上的表现不一样,所以也有各自的特点。链表中各结点在内存中的存放位置是任意的。 链表与数组的主要区别(1)数组的元素个数是固定的,而组成链表的结点个数可按需要增减;(2)数组元素的存诸单元在数组定义时分配,链表结点的存储单元在程序执行时动态向系统申请:(3)数组中的元素顺序关系由元素在数组中的位置(即下标)确定,链表中的结点顺序关系…

    2022年6月16日
    23
  • Spring基于接口的动态代理和统一事务处理

    Spring基于接口的动态代理和统一事务处理Spring基于接口的动态代理和统一事务处理

    2022年4月22日
    39
  • 带记忆化搜索的斐波那契数列

    带记忆化搜索的斐波那契数列带记忆化搜索的斐波那契数列//通过dp数组保留部分结果,动态规划避免大量重复性操作#include#include#includeusingnamespacestd;constintMAXN=100;intdp[MAXN];intfabnaci(intn){if(n==1||n==2){

    2022年7月26日
    6
  • JavaEE 从入门到放弃(一):Java EE 是个什么东西「建议收藏」

    从整体上认识JavaEE,看看JavaEE的主要内容。

    2022年4月15日
    80

发表回复

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

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