KMP算法
来源:互联网 发布:智囊知微阅读答案 编辑:程序博客网 时间:2024/06/11 18:49
http://blog.csdn.net/v_july_v/article/details/7041827
///未经优化的kmp数组void GetNext(char* p,int next[]) { int pLen = strlen(p); next[0] = -1; int k = -1; int j = 0; while (j < pLen) { //p[k]表示前缀,p[j]表示后缀 if (k == -1 || p[j] == p[k]) { ++k; ++j; next[j] = k; } else { k = next[k]; } } }///优化过后的next 数组求法 void GetNextval(char* p, int next[]) { int pLen = strlen(p); next[0] = -1; int k = -1; int j = 0; while (j < pLen) { ///p[k]表示前缀,p[j]表示后缀 if (k == -1 || p[j] == p[k]) { ++j; ++k; ///较之前next数组求法,改动在下面4行 if (p[j] != p[k]) next[j] = k; ///之前只有这一行 else ///因为不能出现p[j] = p[ next[j ]],所以当出现时需要继续递归,k = next[k] = next[next[k]] next[j] = next[k]; } else { k = next[k]; } } } int KmpSearch(char* s, char* p) { int i = 0; int j = 0; int sLen = strlen(s); int pLen = strlen(p); while (i < sLen && j < pLen) { ///①如果j = -1,或者当前字符匹配成功(即S[i] == P[j]),都令i++,j++ if (j == -1 || s[i] == p[j]) { i++; j++; } else { ///②如果j != -1,且当前字符匹配失败(即S[i] != P[j]),则令 i 不变,j = next[j] ///next[j]即为j所对应的next值 j = next[j]; } } if (j == pLen) return i - j; else return -1; }
0 0
- KMP算法详解 【KMP】
- 【KMP】KMP算法模板
- KMP hihoCoder1015 KMP算法
- kmp算法
- KMP算法
- KMP算法
- KMP算法
- KMP算法
- KMP 算法
- kmp算法
- KMP算法
- kmp算法
- KMP算法
- KMP算法
- kmp算法
- kmp算法
- KMP算法
- KMP算法
- Shape的使用详解
- Cocos2d-x数据篇06:SQLite3数据库基础用法
- PL/SQL程序结构概要
- OC学习篇之---归档和解挡
- 第六周项目零:阅读程序(4):结构函数和析构函数
- KMP算法
- Android 从FrameBuffer中读取界面数据实现截图
- 几个移动平台比较
- 与屏幕亮度调节相关的各种方法整理
- 用arcgis制作色带图例简明教程
- Ruby on Rails开发的五点建议
- zookeeper 大量连接断开重连原因排查
- 2567 HDU 寻梦
- 关于系统参数:vm.overcommit_memory 和 vm.overcommit_ratio;