程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> CareerCup之1.8 字符串移位包含問題

CareerCup之1.8 字符串移位包含問題

編輯:C++入門知識

【題目】

原文:

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 
#include 
#include 
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<

【代碼二】

/*********************************
*   日期:2014-5-15
*   作者:SJF0115
*   題號: 字符串移位包含問題
*   來源:CareerCup
**********************************/
#include 
#include 
#include 
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<


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved