BF算法(穷举):
int i = pos;//i用于主串parent中的起始位置
int j = 1; //子串的起始位置
while(i <= parent->length && j <= child->length){
if(parent->ch[i - 1] == child->ch[j - 1]){
i++;
j++;
}else{
i = i - j + 2; //i回朔到上次匹配的首位的下一位
j = 1; //j回到子串的第一个位置
}
}
if(j > child->length){
return i - child->length;
}
return 0;
}
KMP算法(不回溯指针i,利用部分匹配值将指针向右滑到尽可能远的距离,速度快):
部分匹配值的计算:
int i = 0;
int j = -1;
next[0] = -1;
while(i < child.length){
if(j == -1 || child.ch[i] == child.ch[j]){
++i;
++j;
next[i] = j;
}else{
j = next[j];
}
}
KMP算法实现时与BF算法区别
else{
j = next[j];//
}
}
if(j == child->length){
return (i + 1) - j;
}
标签: child
文章来源:
快鱼网
版权声明:①本站除快鱼网签约编辑原创内容以外,部分内容来源于网络、由互联网用户自发贡献,仅供学习参考。
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。
②文章观点仅代表原作者本人不代表本站立场,并不完全代表本站赞同其观点和对其真实性负责。
③文章版权归原作者所有,部分转载文章仅为传播更多信息、受益服务用户之目的,如信息标记有误,请联系站长修正。
④本站一律禁止以任何方式发布或转载任何违法违规的相关信息,如发现本站上有涉嫌侵权/违规及任何不妥的内容,请第一时间反馈。发送邮件到 88667178@qq.com,经核实立即修正或删除。