在编程之美3.1中,此题解法是用strstr()函数,并且以空间换时间,其实只要用循环遍历即可
其时间复杂度: k < O(n) < k + n, 其中k为查找串的长度,n为数据串的长度,空间复杂度为O(1)。
代码如下
#include<iostream>
using namespace std;
int findSubStr(char source[], char subStr[], int sLen, int oLen)
{
if(source == NULL || subStr == NULL || sLen <=0 || oLen <=0)
{
return -1;
}
int isShifting = 0;
for(int i = 0; i < sLen; i++)
{
if(subStr[0] == source[i])
{
isShifting = 1;
int s_index = i + 1;
for(int j = 1; j < oLen; j++)
{
if(source[s_index] == subStr[j])
{
s_index++;
if(s_index < sLen)
continue;
else
s_index = 0;
}
else
{
isShifting = 1;
i = s_index - 1;
break;
}
}
}
}
return isShifting;
}
int main()
{
char source[] = "AABCDAACDB";
char subStr[] = "CDBA";
int sLen = strlen(source);
int oLen = strlen(subStr);
if(findSubStr(source,subStr, sLen, oLen) == 1)
cout << "True.." << endl;
else
cout << "False.." << endl;
return 0;
}
: