KMP算法代码
来源:互联网 发布:linux 光纤网卡 编辑:程序博客网 时间:2024/06/10 01:40
KMP算法
朴素的模式匹配
pat为参加比较的模式串
k为目标串起始位置
int Astring::Find(AString& pat, int k){ int i, j; for(i = k; i <= curLength - pat.curLength; i++){ for(j = 0; j < pat.curLength; j++) if(ch[i + j] != pat.ch[j]) break; if(j == pat.curLength) return i; } return -1;//未找到字串位置}
朴素的模式匹配带有回溯, 一旦不等,将回溯,使i++,再进行下一次匹配,运行时间O(n*m)
KMP算法
使用了一个next函数避免回溯,当匹配遇到问题时,将移动字串的首个字符的位置到next[j]
计算next[j]的函数
void AString::getNext(int next[]){ int j = 0, k = -1, lenP = curLength; next[0] = -1; while(j < lenP) if(k == -1 || ch[j] == ch[k]){ j++;k++; next[j] = k; } else k = next[k];}
KMP算法
int AString::fastFind(AString& pat, int k, int next[]) const{ //使用模式串pat从k开始寻找在当前串(*this)中匹配的位置 //若找到,则返回this串中开始字符的下标,否则返回-1 int posP = 0, posT = k; int lengthP = pat.curLength; int lengthT = curLength; while(posP < lengthP && posT < lengthT) if(posP == -1 || pat.ch[posP] == ch[posP]){ posP++;posT++; } else posP = next[posP]; if(posP < lengthP) return -1; else return posT - lengthP;}
阅读全文
0 0
- KMP算法C++代码
- KMP算法C++代码
- KMP算法代码
- KMP算法-代码实现
- KMP算法C++代码
- KMP算法代码
- 数据结构 KMP算法代码
- kmp算法代码
- KMP算法代码实现
- KMP算法代码
- KMP算法实现代码
- kmp算法java代码
- KMP算法代码实现
- KMP算法代码
- KMP算法代码
- KMP算法(代码)
- kmp next 数组代码 及 kmp 算法
- KMP算法代码&BF算法代码
- 「组合计数」CodeForces
- 计算并输出每行字符串的字母值
- 每天一个linux命令(8):free 命令
- 最小生成树(prime算法)
- 为什么要初始化 CSS 样式
- KMP算法代码
- Visualizing and Understanding Convolutional Networks笔记2
- thinkphp微信支付-JSAPI
- Centos python36 安装tensorflow记录
- AngularJs购物车删除和计算总金额
- 【论文阅读】Superpixel-based Tracking-by-Segmentation using Markov Chains
- HBase最佳实践-HBase中的写性能优化策略
- Spring Boo之helloworld(myeclipse版本)
- PAT甲1010 最大进制不一定是36