使用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;
}
KMP算法查找字符串
最新推荐文章于 2024-01-27 21:28:27 发布