字符串匹配算法,已通过测试 ,原理可以在网上查,按照算法导论里面内容实现。
int strStr(string src, string pattern) { //主函数
int rlt = -1;//如果没有找到匹配的,就返回-1
int sizeSrc = src.size();
int sizePat = pattern.size();
if(sizeSrc<sizePat) return -1;
if(0==sizePat) return 0;
int* kmpPat = getKMPpattern(pattern);
int index=0,len = 0;
while(index<sizeSrc && len<sizePat)
{
if(pattern[len]==src[index])
{
len++;
index++;
}
else
{
if(len==0) index++;
else len = kmpPat[len-1]+1;
//if(-1==len) len=0;
}
}
if(len==sizePat) rlt = index-sizePat;
delete []kmpPat;
return rlt;
}
int* getKMPpattern(string pattern) //求取模式函数
{
int size = pattern.size();
int *rlt=new int[size];
if(size==0) return rlt;
rlt[0]=-1;
int k=-1;
for(int i=1;i<size;i++)
{
while(k>-1 && pattern[k+1]!=pattern[i])
k = rlt[k];
if(pattern[k+1]==pattern[i])
k++;
rlt[i]=k;
}
return rlt;
}