[程式設計之美3.1]字串移位包含的問題
阿新 • • 發佈:2019-01-25
題目:給定字串s1和s2,要求判定s2是否能夠被s1做迴圈移位得到的字串包含。例如給定s1 = AABCD和s2 = CDAA,返回true;給定s1 = ABCD和s2 = ACBD,返回false。
思路一:最直接最暴力的解法就是對字串迴圈移位,再進行字串包含的判斷,從而判斷所有可能性。
思路二:s1 = AABCD迴圈包含s2 = CDAA,等價於s3 = s1s1包含s2,因此可以通過提高空間複雜度的方法來換取時間複雜度的降低。
程式碼如下:
#include <iostream> #include <stdlib.h> #include <string> using namespace std; bool string_contain(char * src, char * des) { char s[100000]; //這裡宣告的時候有沒有分配記憶體? strcpy(s, src); strcat(s,src); if(strstr(s,des) == 0) return false; else return true; } int main() { char src[] = "AABBCD"; char des[] = "CDAA"; if(string_contain(src,des)) cout << "src contains des" << endl; else cout << "src doesn't contain des" << endl; system("pause"); return 0; }