字串位移包含的問題

2021-07-11 03:32:32 字數 1050 閱讀 3381

題目

設定兩個字串s1和s2,要求判定s2是否能夠被s1做迴圈位移(rotate)得到的字串包含。例如給定s1=」aabcd」,s2=」bcdaa」,返回true;給定s1=」abcd」,s2=」acbd」,返回false。

分析

我們可以對迴圈位移之後的結果進行分析:

以s1為=「abcd」為例,先分析對s1進行迴圈位移之後的結果,如下所示:

abcd->bcda->cdab->dabc->abcd…

假設我們把前面移走的資料進行保留,會發現有如下規律:

abcd->abcda->abcdab->abcdabc->abcdabcd…

可以看出,對s1做迴圈移位所得到的字串都將是字串s1s1的子串。如果s2可由s1迴圈移位得到,那麼s2一定是s1s1的子串。

c++**

#include 

#include

using

namespace

std;

bool isrotate(string s1, string s2)

int main()

參考

string::find - c++ reference

我們用到成員函式:

size_t find (const string& str, size_t pos = 0) const noexcept;

(1)parameters(引數)

(2)return value(返回值)

the position of the first character of the first match.

if no matches were found, the function returns string::npos.

返回搜尋到的字串在本字串中第乙個字元的位置,如果沒有搜尋到,則返回string::npos(static const size_t npos = -1;)。

字串包含問題

字串包含問題 判斷小字串的所有字元是否大字串都有 思路一 針對小字串的每乙個字元一一與大字串的字元輪詢比較即可,很明顯時間複雜度為o n m bool compare string s1,string s2 if j s2.length return true 思路二 對兩個字串分別排序,同時依次輪...

字串包含問題

假設這有乙個各種字母組成的字串a,和另外乙個字串b,字串裡b的字母數相對少一些。什麼方法能最快的查出所有小字串b裡的字母在大字串a裡都有?比如,如果是下面兩個字串 string 1 abcdefghlmnopqrs string 2 dcgsrqpo 答案是true,所有在string2裡的字母st...

字串包含問題

兩個字串s1和s2,假設s1長度大於等於s2長度,判斷s2是否為s1的乙個子集。例如 s1 abcdefghi,s2 acefg,由於s2中的每個元素都出現在s1中,說明s1包含s2.若s2 acefgk,由於k不在s1中,因此s1不包含s2。設s1長度為m,s2長度為n 方法1 brute for...