1. 程式人生 > >[程式設計之美3.1]字串移位包含的問題

[程式設計之美3.1]字串移位包含的問題

題目:給定字串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;
}