在字符串中查找字串。给定一个字符串A,要求在A中查找一个字串B。
如主串A=“ababcabcacbab”,要你在A中查找字串(模式串)B="abcac"
用最基础的方法其时间复杂度为O(m-n-1)*n
下面给出O(m+n)
bool find(const char *str1,const char *str2)
{
int n1=strlen(str1);
int n2=strlen(str2);
assert(str1 != NULL && str2 != NULL && n1 >= n2);
const char *p1,*p2,*p3;
p1=str1;
p2=str1;
p3=str2;
int len=0;
while(p2 != NULL && len != n2 && p2 - str1 <= n1- n2 )
{
if(*p1 == *p3)
{
p1++;
p3++;
len++;
} else{
len=0;
p2++;
p1 = p2;
p3=str2;
}
}
if(len == n2)
return true;
else
return false;
}
int main()
{
char *str1="ababcabcacbab";
char *str2="abcac";
cout<<find(str1,str2)<<endl;
return 0;
}