問題描述:
給定兩個字串s1和s2,要求判定s2是否能夠被s1做迴圈移動得到的字串包含。如s1=aabcd和s2=cdaa,則s1迴圈移動後包含s2,返回true;s1=abcd和s2=acbd,則s1迴圈移動後不包含s2,返回false
解題思路:
1)可以發現,s1迴圈移動後的結果肯定包含在字串s1+s1中,所以可以直接判斷s2是否包含在字串s1+s1中,這樣需要的空間複雜度較大,但是只需要做一次contains的查詢,時間複雜度較小。 (參考《程式設計之美》)
2)可以把字串s1看做乙個迴圈列表,這樣只要重新設計contains函式就可以,空間複雜度和時間複雜度都很小。
**如下:
/**
*@author mwd
* 2013-9-20
*/#include#include#includebool rotatecontain1(char*,char*);
bool rotatecontain2(char*,char*);
int main()
/** * 可以將問題轉化為判斷des是否在字串src+src中,增加了空間複雜度,減小了時間複雜度
*/bool rotatecontain1(char* src,char* des){
int len1 = strlen(src);
int len2 = strlen(des);
char * str = (char*)malloc(sizeof(char)*(2*len1));
int i=0;
for(int j=0;j
字串移位包含問題
本問題 於 程式設計之美 問題描述 給定兩個字串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 方法1 窮舉法 將長度為n的s1移動n次 每次移動1為 檢視是否包含s2 方法2 將長度為n的s1移動n次 保留每...
字串移位包含的問題
字串移位包含的問題 給定兩個字串s1和s2,要求判斷s2是否能夠被s1做迴圈移位得到的字串包含,例如,給定s1 aabcd和s2 cdaa,返回true 給定s1 abcd和s2 acbd,返回false 在做這道題的時候我發現了乙個很容易出錯,但是去不容易找到原因。主要原因是我們對於全變數初始化位...