一步一步复习数据结构和算法基础-KMP算法
来源:互联网 发布:icinga windows 编辑:程序博客网 时间:2024/05/21 22:29
在csdn里面看了许多关于KMP算法的讲解,我想自己不需要讲了。
我主要看的是这个博主的帖子,写的非常好非常详细啊。
http://blog.csdn.net/v_JULY_v/article/details/7041827
果断的贴代码。
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXSTRLEN 255typedef unsigned char SString[MAXSTRLEN + 1];int next[MAXSTRLEN];//创建一个串void StrAssign(SString T){int i;char temp[MAXSTRLEN];gets(temp);for(i=1;i<=MAXSTRLEN;i++){T[i] = temp[i-1];}T[0] = strlen(temp);}//KMPint Index_KMP(SString S,SString T,int pos){int i=pos,j=1;while(i<=S[0] && j<=T[0]){if(j==0 || S[i] == T[j]){i++;j++;}elsej = next[j];}if(i > T[0]) return i-T[0];else return 0;}//一般的next数组求解void GetNext(SString T){int i=1,j=0;next[1] = 0;while(i < T[0]){if(j==0 || T[i] == T[j]){++i;++j;next[i]=j;}elsej = next[j];}}//改进版next数组求解void GetNextVal(SString T){int i=1,j=0;next[1] = 0;while(i<T[0]){if(j==0 || T[i] == T[j]){++i;++j;if(T[i] != T[j])next[i]=j;else next[i]=next[j];}elsej=next[j];}}int main(){//a是主串,b是模式串int pos;SString a,b;StrAssign(a);StrAssign(b);GetNext(b);printf("输入匹配的起始位置.\n");scanf("%d",&pos);printf("postion is %d\n",Index_KMP(a,b,pos));return 0;}
- 一步一步复习数据结构和算法基础-KMP算法
- 一步一步复习数据结构和算法基础(1)
- 一步一步复习数据结构和算法基础-二叉排序树
- 一步一步复习数据结构和算法基础-双链表
- 一步一步复习数据结构和算法基础--kruskal算法
- 一步一步复习数据结构和算法基础-Floyd算法
- 一步一步复习数据结构和算法基础-dijkstra算法
- 一步一步复习数据结构和算法基础-栈和队列(1)
- 一步一步复习数据结构和算法基础-栈和队列(2)
- 一步一步复习数据结构和算法基础-链表(1)
- 一步一步复习数据结构和算法基础-链表(2)
- 一步一步复习数据结构和算法基础-链表(3)
- 一步一步复习数据结构和算法基础-线性表
- 一步一步复习数据结构和算法基础-单链表冒泡排序
- 一步一步复习数据结构和算法基础-循环链表
- 一步一步复习数据结构和算法基础-顺序串
- 一步一步复习数据结构和算法基础-稀疏矩阵基本操作
- 一步一步复习数据结构和算法基础-二叉树基本操作
- 几个有用的iOS开源代码
- OCX和DLL的区别
- 文件描述符、文件表项、V节点表项的一些总结
- 28个Unix/Linux的命令行神器
- php_server详解
- 一步一步复习数据结构和算法基础-KMP算法
- 建设DevOps能力,实现业务敏捷
- sql server 全文搜索研究
- Android修改system只读权限:remount
- Failed to connect to database: Error: Can't connect to local MySQL server through socket '/var/lib/m
- iPhone开发内存管理之一
- js中格式化时间
- DataTable与Linq相互转换
- weblogic jms 不融合spring 实例讲解