字串移位包含

2021-07-02 17:59:20 字數 572 閱讀 7408

給定兩個字串s1和s2 要求判定s2是否能夠被通過s1作迴圈移位 得到的字串包含 假設給定s1=aabcd  s2=cdaa 返回true 給定s1=abcd s2=acbd false

方法1:窮舉法

將長度為n的s1移動n次 每次移動1為 檢視是否包含s2

方法2:

將長度為n的s1移動n次 保留每次前面移動的資料

如s1=abcd

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

那麼abcdabcd=s1s1=s

那麼我們只需要檢視s中是否包含s2

相較於方法1 利用了提高空間複雜度來換取時間複雜度降低 

#include #include #include using namespace std;

int main()

{ string s1="abcd";

string s2="bca";

string ss;

ss=s1+s1;

if(strstr(ss.c_str(),s2.c_str())!=null)

cout<<"true"<

字串移位包含問題

問題描述 給定兩個字串s1和s2,要求判定s2是否能夠被s1做迴圈移動得到的字串包含。如s1 aabcd和s2 cdaa,則s1迴圈移動後包含s2,返回true s1 abcd和s2 acbd,則s1迴圈移動後不包含s2,返回false 解題思路 1 可以發現,s1迴圈移動後的結果肯定包含在字串s1...

字串移位包含問題

本問題 於 程式設計之美 問題描述 給定兩個字串s1和s2,要求判定s2是否能夠被通過s1做迴圈移位 rotate 得到的字串包含。例如,給定s1 aabcd和s2 cdaa,返回true 給定s1 abcd和s2 acbd,返回false。下面有兩種解法,第一種是列舉法 第二種是用了一種技巧,實現...

字串移位包含的問題

字串移位包含的問題 給定兩個字串s1和s2,要求判斷s2是否能夠被s1做迴圈移位得到的字串包含,例如,給定s1 aabcd和s2 cdaa,返回true 給定s1 abcd和s2 acbd,返回false 在做這道題的時候我發現了乙個很容易出錯,但是去不容易找到原因。主要原因是我們對於全變數初始化位...