KMP算法实现
2015-08-26 18:00
253 查看
KMP算法代码实现
之前看过一些KMP算法的实现 ,但是每次看完就会忘记,今天花了几个小时又理了理思路,加强一下理解:下面的代码是找出目标串target中包含多少个匹配串partten,代码自己实现,鉴于时间仓促加个人编程能力有限,写的代码也很丑,大牛们可以考虑绕行…
参考:http://www.ituring.com.cn/article/59881
代码块
代码块语法遵循标准markdown代码,例如:#include<iostream> #include<string> using namespace std; void Find_KMP(const string& target,const string& partten,int& sum){ int par_len = partten.size(); int tar_len = target.size(); int over_ride[par_len]; over_ride[0] = -1; int index ; for(int i=1;i<par_len;i++){ index = over_ride[i-1]; while(index>=0 && partten[index+1]!=partten[i]){ index = over_ride[index]; } if(partten[index+1] == partten[i]){ over_ride[i] = index + 1; } else{ over_ride[i] = -1; } } int i=0,j=0; sum = 0; while(i<tar_len){ while(j<par_len && i<tar_len){ if(target[i]==partten[j]){ i++;j++; } else if(j==0) i++; else j = over_ride[j-1]+1; } if(j == par_len && i<tar_len){ sum++; j = 0; } else break; } /** 是否能够找到匹配串的代码 while(i<tar_len&&j<par_len){ if(target[i]==partten[j]){ i++;j++; } else if(j==0) i++; else j = over_ride[j-1]+1; } if(j == par_len){ return true; } else return false; **/ } //main函数 int main(){ string target = "ababhababrhah"; string partten = "ab"; int sum ; /* if(Find_KMP(target,partten)){ cout << "find" << endl; } else cout << "no" <<endl; */ Find_KMP(target,partten,sum); cout <<"sum = " <<sum <<endl; return 0; }
相关文章推荐
- Tomcat端口占用
- JS获取新浪实时股票行情数据
- 【.Net码农】html+ashx 表单提交示例
- C#+OpenGL+FreeType显示3D文字(3) - 用PointSprite绘制文字
- Java中byte与(16进制)字符串的互相转换
- openfire+smack收发消息
- java虚拟机内存溢出,eclipse配置
- C++虚基类的作用
- 【.Net码农】Jquery+ashx实现Ajax
- PBJVision 快速在应用中集成相机/拍摄功能
- winform开发中的隐藏与展开实现原理
- Java中关于三目运算符理解和简单应用.
- linux常用命令
- Java多线程互斥访问变量
- java访问mongodb的基本操作
- PHP PDO访问数据库
- KEILV5之工程建立工程
- hdoj 1312 Red and Black【dfs,回溯】
- 高并发面试必问:分布式消息系统Kafka简介
- Arch下装BCM43142无线网驱的多种尝试,最终成功