int horspool(const char* t,const char* p)
{//t=Text,p=pattern,m=strlen(p),n=strlen(t)
int m=strlen(p),n=strlen(t);
int d[256];//256=2^8
memset(d,m,sizeof(d));//initialize d[c] to m
int pos=0;//pos=position
//preprocessing
for (int j = 0; j < m-1; ++j)
{
d[ p[j] ]=(m-1)-j;
}
//searching
while (pos<=n-m)//arrive at EOF
{
int j=m-1;//from right to left
while(j>-1 && t[pos+j]==p[j])//get a match
j--;
if (j==-1)//match all
{
return pos+1;
}
pos+=d[ t[pos+(m-1)] ];
}
return -1;//not match 'p' in 't'
}
6 个解决方案
#1
没看到过 这种算法,前来学习。。。
#2
浪费我激动地表情。。。
还以为有人帮忙找到了呢
#3
memset(d,m,sizeof(d));
這是以一個字節為單位來設置為m
如果m=5
d[0] = 0x05050505;
這是以一個字節為單位來設置為m
如果m=5
d[0] = 0x05050505;
#4
3L正解,就错在memset(d,m,sizeof(d));上,改成循环赋值就ok了
#5
step by step debug
#6
嗯,已解决,多谢
#1
没看到过 这种算法,前来学习。。。
#2
浪费我激动地表情。。。
还以为有人帮忙找到了呢
#3
memset(d,m,sizeof(d));
這是以一個字節為單位來設置為m
如果m=5
d[0] = 0x05050505;
這是以一個字節為單位來設置為m
如果m=5
d[0] = 0x05050505;
#4
3L正解,就错在memset(d,m,sizeof(d));上,改成循环赋值就ok了
#5
step by step debug
#6
嗯,已解决,多谢