【算法学习】KMP查找匹配字符串
来源:互联网 发布:银临和灰原穷夫妇 知乎 编辑:程序博客网 时间:2024/06/04 18:06
#include <stdio.h>#include <stdlib.h>#include <string.h>int GenNext(char *mod, int len, int next[]){if (mod == NULL || next == NULL || len <= 0)return -1;next[0] = -1;int k = -1;int j = 0;while (j < len - 1){if (k == -1 || mod[k] == mod[j]){k++;j++;next[j] = next[k] + 1;}else{k = next[k];}}return 1;}int KmpSearch(char *text, char *mod){if (text == NULL || mod == NULL)return -1;int modlen = strlen(mod);int *next = (int *)malloc(sizeof(int) * modlen);if (!next){return -1;}if (GenNext(mod, modlen, next) < 0)return -1;int i = 0, j = 0;int textlen = strlen(text);while (i < textlen && j < modlen && j != -1){if (text[i] == mod[j]){i++;j++;}else{j = next[j];}}free(next);if (j == modlen)return i - j;elsereturn -1;}int main(int argc, char *argv[]){char text[256], mod[16];printf("Please input text:");scanf("%s", text);printf("Please input mod:");scanf("%s", mod);int index = KmpSearch(text, mod);printf("Index[%d] OK\n", index);return 0;}
主要思路是先用一个next数组保存模式字符串的最长前缀后缀字符串,在匹配时就可以根据next数组快速匹配,时间复杂度O(n+m), 空间复杂度O(m).
具体详见http://blog.csdn.net/v_july_v/article/details/7041827
0 0
- 【算法学习】KMP查找匹配字符串
- 字符串匹配查找算法-KMP
- KMP字符串匹配算法学习总结
- 算法学习-KMP(字符串匹配)解释
- 字符串匹配-KMP算法学习笔记
- KMP算法及字符串匹配学习
- KMP 字符串匹配算法
- kmp字符串匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串匹配算法-kmp
- KMP(字符串匹配)算法
- KMP 字符串匹配算法
- 字符串匹配算法:KMP
- KMP算法 字符串匹配
- 字符串匹配 KMP 算法
- KMP字符串匹配算法
- KMP字符串匹配算法
- POJ 2288 Islands and Bridges
- JDK容器与并发—Queue—ConcurrentLinkedQueue
- 保姆照顾小孩的五种实现:常规、代理协议、Block、观察者、通知
- 在WebApi中基于Owin OAuth使用授权发放Token
- js设置form的onsubmit事件
- 【算法学习】KMP查找匹配字符串
- 多个C3P0的java举例
- struts2的工作原理和相关文件的介绍
- cygwin 中的 socket
- LeetCode Sum Root to Leaf Numbers
- Python环境搭建与连接SQL Server类MyDBase的实现
- 在进程间切换文件描述符
- matlab tensor toolbox 实现HOSVD(高阶奇异值分解)推荐系统
- 13&14A strange lift