您的位置:首页 > 其它

KMP算法查找字符串

2011-11-15 23:21 239 查看
使用KMP算法查找字符串,时间效率为O(m+n):

#include<stdio.h>

#include<stdlib.h>

#include<string.h>

//KMP算法寻找字符串匹配,时间效率为O(m+n)

void cmpnext(const char *pattern,int *next)//next算法

{

next[0]=-1;

int index;

int len=strlen(pattern);

for(int i=1;i<len;i++)

{

index=next[i-1];

while(index>=0&&pattern[i]!=pattern[index+1])

index=next[index];

if(pattern[i]==pattern[index+1])

next[i]=index+1;

else

next[i]=-1;

}

}

int main(int argc,char**argv)

{

char *a="abcabcabeg";

char *b="cabcabf";

int len=strlen(b);

int len1=strlen(a);

int *next=new int[len];

cmpnext(b,next);

int pattern_index=0;

int total_index=0;

while(total_index<len1&&pattern_index<len)

{

if(a[total_index]==b[pattern_index])

{

total_index++;

pattern_index++;

}

else

if(pattern_index==0)

total_index++;

else

pattern_index=next[pattern_index]+1;

}

if(pattern_index==len)

printf("true\n");

else

printf("false\n");

delete[] next;

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: