[数据结构]字符串匹配(KMP方法)
来源:互联网 发布:米表源码 编辑:程序博客网 时间:2024/04/26 08:08
/*Name:字符串匹配(KMP方法)Actor:HTTime:2015年10月12日Error Reporte:*/#include"stdio.h"#include"string.h"#include"stdlib.h"#define N 10010//只走一遍原串//每次不匹配,将子串往回移动到一定位置//移动的位置是提前根据“循环节”计算得出//O(m+n)int next[30];void fin_next(char * ncomer)//改版{// 0 1 2 3 4 5 6 7// a a a a d a a d//通过i和j进行匹配 从而判断当(i+1)失败的情况要走的j//并且往回找的时候 直接跳过数值相同的情况// - - - - 3 - - 2//j- 0 1 2 3 0 1 2int i, j;next[0] = -1;for (i = 0, j = -1; ncomer[i] != '\0';){if (j == -1 || ncomer[i] == ncomer[j]){if (ncomer[i + 1] != ncomer[j + 1])next[i + 1] = j + 1;else next[i + 1] = next[j + 1];//如果往回找发现数值相同,直接返回那个数的nexti++; j++;}else j = next[j];}}//void fin_next(char * ncomer)//原版//{//// 0 1 2 3 4 5 6 7//// a a a a d a a d//// - 0 1 2 3 0 1 2////通过i和j进行匹配,从而判断当(i+1)失败的情况要走的j//int i, j;//next[0] = -1;//for (i = 0, j = -1; ncomer[i] != '\0';)//{//if (j == -1 || ncomer[i] == ncomer[j])//{//next[i + 1] = j + 1;//i和j匹配成功,那么i+1的next就是j+1//i++; j++;//}//else j = next[j];//}//}int charcmp(char* ori, char* ncm){int i,j;for (i = 0, j = 0; ori[i] != '\0';) //BUG点,注意不要将ncm[j] !='\0'放进去,会过早结束循环{if (j == -1 || ori[i] == ncm[j]){i++; j++;}else j = next[j];if(j != -1 && ncm[j] == '\0') break;}if (ncm[j] == '\0') return i-j;else return NULL;}int main(){int i, j;char ori[30], ncomer[30];while (scanf("%s", ori) != EOF){scanf("%s", ncomer);fin_next(ncomer);int ans = charcmp(ori, ncomer);printf("%s\n", &ori[ans]);}system("pause");return 0;}
0 0
- [数据结构]字符串匹配(KMP方法)
- [数据结构] KMP字符串匹配
- [数据结构]字符串匹配KMP
- 数据结构-字符串匹配kmp
- 数据结构-字符串匹配kmp模板
- 大话数据结构十一:字符串的模式匹配(KMP算法)
- 大话数据结构十一:字符串的模式匹配(KMP算法)
- KMP(字符串匹配)
- 【数据结构与算法】字符串匹配KMP算法
- 数据结构 字符串模式匹配之KMP算法
- 数据结构字符串匹配——KMP算法
- 数据结构与算法之KMP 字符串匹配
- 字符串匹配(KMP算法)
- 字符串匹配算法(KMP)
- kmp算法(字符串匹配)
- 字符串匹配(KMP算法)
- KMP算法(字符串匹配)
- 字符串匹配(KMP算法)
- 林达华:Computer Vision的尴尬
- linux命令概论
- 几个字符串匹配算法
- KMP算法
- POJ2155 Matrix 二维树状数组
- [数据结构]字符串匹配(KMP方法)
- 软工文档简介
- MongoDb 的 MMAPv1 和 WiredTiger 存储引擎空间对比(800万文档 )
- 软件工程之软件维护
- Understanding the differences between client/server and peer-to-peer networks
- QTP中的Action有什么作用?有几种?
- DataInputStream和DataOutputStream
- codevs售货员的难题 —— 状态压缩动态规划[四星]
- win7 下用vmware装mac虚拟机无法上网 —ios入门