給定兩個字串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 在做這道題的時候我發現了乙個很容易出錯,但是去不容易找到原因。主要原因是我們對於全變數初始化位...