字符串匹配KMP算法初探
来源:互联网 发布:java ssh2 linux交互 编辑:程序博客网 时间:2024/06/11 12:00
先来看基本的串的匹配算法。
给定一父串和一子串,判断子串是否匹配父串,匹配则返回父串开始匹配处的坐标,不匹配则返回-1.可配合下面的过程图看代码:
#include <stdio.h>#include <string.h>int Index(char s[], char t[], int pos)//s存放父串,t放子串。{int i,j,slen,tlen;//i,j代表游标,分别指向父串和子串i = pos;//父串从pos位置开始j = 0;slen = strlen(s);tlen = strlen(t);while( i<slen && j<tlen){if( s[i]==t[j] ){i++;j++;}else{i = i-j+1;//不能写成i=1是因为pos不一定从0开始j = 0;}}if( j >= tlen)return i-tlen;//返回父串匹配子串开始点的下标else return -1;//没有匹配则返回-1}int main(){char s[]="goodgoogle";char t[]="google";int index = Index(s,t,0);printf("%d\n",index);//应该返回4return 0;}
KMP算法:
参考:http://blog.sina.com.cn/s/blog_67947d740100nwwl.html
#include <stdio.h>#include <string.h>void GetNext(char t[],int next[]){int i, j, tlen;tlen = strlen(t);i = 0;j = -1;next[0] = -1;while(i < tlen){if((j == -1) || (t[i] == t[j])){i++;j++;next[i] = j;}else{j = next[j];}}}int Index(char s[], char t[], int pos)//s存放父串,t放子串。{int next[255];int i,j,slen,tlen;//i,j代表游标,分别指向父串和子串i = pos;//父串从pos位置开始j = -1;slen = strlen(s);tlen = strlen(t);GetNext(t,next);while( i<slen && j<tlen){if( j==-1 || s[i]==t[j] ){i++;j++;}else{j = next[j];}}if( j >= tlen)return i-tlen;//返回父串匹配子串开始点的下标else return -1;//没有匹配则返回-1}int main(){int index;char s[]="goodgoogle";char t[]="ababaaaba";index = Index(s,t,0);printf("%d\n",index);//应该返回4return 0;}
- 字符串匹配KMP算法初探
- 字符串匹配之KMP算法初探
- KMP 字符串匹配算法
- kmp字符串匹配算法
- kmp字符串匹配算法
- KMP字符串匹配算法
- 字符串匹配算法-kmp
- KMP(字符串匹配)算法
- KMP 字符串匹配算法
- 字符串匹配算法:KMP
- KMP算法 字符串匹配
- 字符串匹配 KMP 算法
- KMP字符串匹配算法
- KMP字符串匹配算法
- KMP算法:字符串匹配
- KMP字符串匹配算法
- 字符串匹配--KMP算法
- KMP字符串匹配算法
- 工作流技术趋势分析
- flock简介
- tomcat虚拟路径的几种配置方法
- uc脚本 4--常量等等
- hdu1237 简单计算器
- 字符串匹配KMP算法初探
- Sql Server中的日期与时间函数
- Simple, Fast, and Practical Non-Blocking and Blocking Concurrent Queue Algorithms
- Tomcat 6.0 配置--虚拟目录的设置+多域名绑定
- 如果不是异地
- 在SharePoint 2010程序中使用Session
- 设计模式C++实现(6)——建造者模式
- Java写的小游戏贪吃蛇代码
- Zend Studio加载现有PHP项目