KMP算法-字符串匹配
来源:互联网 发布:java程序员必看的书籍 编辑:程序博客网 时间:2024/06/05 02:33
先看看普通字符串匹配BF算法。
BF算法
BF算法是普通的模式匹配算法,BF算法的思想就是将目标串S的第一个字符与模式串P的第一个字符进行匹配,若相等,则继续比较S的第二个字符和P的第二个字符;若不相等,则比较S的第二个字符和P的第一个字符,依次比较下去,直到得出最后的匹配结果。
代码实现:
int BFMatch(string s,string p){ int i,j; for(i=0;i<s.length();i++){ j=0; while(j<p.length() && s[i]==p[j]){ i++; j++; } if(j==p.length()){ return i-p.length(); } i=i-j+1; } return -1;}
KMP算法
原理介绍可以看篇文章:
http://www.cnblogs.com/dolphin0520/archive/2011/08/24/2151846.html
大概思想就是:不匹配时,模式串的指针不是移动一步,而是根据部分匹配值来移动。
代码:
//生成串p的部分匹配值vector<int> getMatch(string p){ auto len=p.length(); vector<int> match(len,-1); match[0]=0; for(int i=1,k=0;i<p.length();i++){ while(k>0 && p[i]!=p[k]){ //k对应的串往后移动(已匹配长度-部分匹配值),并且定位到部分匹配长度位置。 //因为i不变,k更新到match[k-1] k=match[k-1]; } if(p[i]==p[k]) { k++; } match[i]=k; } return match;}//找出s中p的所有匹配,返回每个匹配的首地址vector<int> KMPMatch(string s,string p){ vector<int> ret; vector<int> match=getMatch(p); for(int i=0,k=0;i<s.length();i++){ while(k>0 && s[i]!=p[k]){ k=match[k-1]; } if(s[i]==p[k]){ k++; } if(k==p.length()){ ret.push_back(i+1-p.length()); //返回s中匹配p的所有首地址 k=match[k-1]; } } return ret;}
0 0
- KMP算法-字符串匹配
- KMP 字符串匹配算法
- kmp字符串匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串匹配算法-kmp
- KMP(字符串匹配)算法
- KMP 字符串匹配算法
- 字符串匹配算法:KMP
- KMP算法 字符串匹配
- 字符串匹配 KMP 算法
- KMP字符串匹配算法
- KMP字符串匹配算法
- KMP算法:字符串匹配
- KMP字符串匹配算法
- 字符串匹配--KMP算法
- KMP字符串匹配算法
- KMP字符串匹配算法
- Android图像处理
- iOS调试技巧
- 第八周项目三顺序串算法
- 开源作业调度软件Quartz2.2.2 官方Examples学习
- redirect forward区别
- KMP算法-字符串匹配
- openlayers2调用天地图WMTS服务简单例子
- C#学习日记27----属性
- JAVA 注解
- iOS 本地存储NSUserDefaults
- 关于哲学家进餐问题
- 使用Spring MVC统一异常处理实战
- Java-- join源代码测试
- 汽车诊断协议ISO14230