KMP字符串匹配
来源:互联网 发布:软件部门管理制度 编辑:程序博客网 时间:2024/05/23 00:58
思路
判断s中是否含有字符串t。
一般思路为:从s中首字符开始,依次与t中进行比对,直到t结尾或者某一个位置两者不同 。如果到t的结尾,则表示s中含有t。如果有一个位置不相同,那么从s中下一个字符开始,再次与t中字符比对。如下:
i = 0,j = 0; for(;i<pl;i++){//pl为p字符串的长度,依次遍历它的每一个字符串 int start = i;//记录此时开始比较的字符串的下标 while(i<pl && j<len){//len子串的长度 if(p[i] == s[j]){ i++; j++; }else{ i = start; j = 0; break; } } if(j >= len){ printf("%d ",start); j = 0; break; } }
这样的比较,每一次遇到不同的时候都需要将i重新归位,而KMP算法就是为避免此种情况的。
KMP算法,不需要将i进行移位,只需要将子串往右移一定的位数。
代码
char* p = "ioabaabcacvaa"; char* s="abaabcac"; int len = (int)strlen(s); int next[len]; next[0] = -1;//如果此时仍不匹配,就需要比对下一个字符 int j = -1; int i = 0; while(i < len){ if(j == -1 || s[i] == s[j]){ j++; i++; next[i]=j; }else{ j = next[j]; } } i = 0,j = 0; int pl = (int)strlen(p); while(i < len && j<pl){ if(i == -1 || s[i] == p[j]){ j++; i++; }else{ i = next[i]; } } if(i>=len){ printf("%d ",j - len); }
0 0
- KMP 字符串匹配算法
- kmp字符串匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串匹配算法-kmp
- KMP(字符串匹配)算法
- 字符串匹配 KMP
- KMP 字符串匹配算法
- 字符串匹配算法:KMP
- KMP算法 字符串匹配
- 字符串匹配 KMP 算法
- KMP字符串匹配(1)
- KMP字符串匹配(2)
- KMP字符串匹配(3)
- KMP字符串匹配算法
- KMP字符串匹配
- KMP字符串匹配算法
- KMP字符串匹配
- 使用svn的合理姿势
- 斐波那契数列11
- LeetCode-337.House Robber III
- 13.6 线程的生命周期状态,线程常用的方法
- <1> perl概述
- KMP字符串匹配
- 基于Python的接口测试框架
- Spark学习15之用Maven编译时报 java.lang.OutOfMemoryError: PermGen space异常
- js中undefined,null,NaN的区别
- 有向路径检查
- windows下protobuf jar包的编译
- NOSQL《二》之MongoDB的加强
- 《机器学习实战》--朴素贝叶斯
- AsyncTask异步加载框架原理(面试会常问到的哦!!!)