KMP模式匹配算法
KMP算法可以说是一个很经典的模式匹配算法了,刚开始并没有看懂,多看几遍就好了。
朴素模式匹配算法(KMP算法没提出来之前的常用的匹配算法)
当我们在一篇文章中去搜索一个单词的时候,就是在文章中对这个单词进行定位操作。这种子串的定位操作通常称为串的模式匹配。是字符串中最重要的操作之一。模式匹配就是给定两个字符串O和F,长度分别为n和m,判断F是否在O中,如果出现则返回出现的位置。
例如我们要从主串S="csdbcsdn"中,找到T="csdn"这个子串的位置,我们通常需要以下的步骤:
1:主串S第一位开始,S与T的前三个字母都匹配成功,但是S的第四个位置跟T的第四个位置不同,所以第一位匹配失败。
2:主串S第二位开始,S的首字母是s,子串T的首字母是c,匹配失败
3:主串S第三位开始,S的首字母是d,子串T的首字母是c,匹配失败
4:主串S第四位开始,S的首字母是b,子串的首字母是c,匹配失败
5:主串S第五位开始,S与T,4个字母全匹配,匹配成功。
简单的说,就是对主串的每一个字符作为子串的开头,与要匹配的字符串进行匹配。对主串做最大循环,每个字符开头做T的长度的小循环,直到匹配成功或全部遍历完为止。
#朴素模式匹配
#include<stdio.h>
#include<string.h>
int IndexString (char S[10],char T[10],int pos)
{
int i=pos; /*use to index the location of S */
int j=0; /*use to index the location of T*/
int slen; /*the length of String S*/
int tlen; /* the length of String T*/
slen=strlen(S);
tlen=strlen(T);
while(i<slen && j<tlen)
{
if(S[i]=