首页 > 编程知识 正文

kmp算法和bf算法 区别,kmp算法图解

时间:2023-05-04 04:33:20 阅读:140048 作者:2

数据的自然柠檬

typedefstructsstring { charch [ maxlen ]; int length; (; KF算法的j的移动函数

voidget_next(sstringt,int next[] ) { int i=1; next[1]=0; int j=0; while(it.length ) if ) j==0||t.ch[I-1]==t.ch[j-1] ) I; j; next[i]=j; } else j=next[j]; }如果字符串t是字符串s的部分字符串,则经典KMP算法确定输出部分字符串位于主字符串的第一个位置

int Inder_common健康月光(SString S,SString T,int pos ) { int next[255]; int x; //存储上一个j值//int t=1; //计数get_next(t,next ); //12打印() (n ); int i=pos; int j=1; wile(I=s.lengthj=t.length ) ) { //x=j; if(j==0||s.ch[I-1]==t.ch[j-1] ) I; j; } else j=next[j]; (//printf('%d ',j ); //return t; if(JT.Length ) return i-T.length; else return -1; }

//糖块匹配

void Index_interesting (

{

SString S,t;

int n; //n个同学

scanf('%d ',n );

int a=0

for(a=0; an; a )

{

scanf('%d ',S.ch[a] );

}

int m; //

scanf('%d ',m );

for(a=0; 自动取款机; a )

{

scanf('%d ',T.ch[a] );

}

s.Length=Strlen(s.ch );

t.Length=Strlen(t.ch );

int next[255]; int x; //存储上一个j值

//int t=1; //计数

get_next(t,next );

//12打印() (n );

int i=1;

int j=1;

wile(I=s.lengthj=t.length ) )。

{

//x=j;

if(j==0||s.ch[I-1]==t.ch[j-1] )

{

}

else

j=next[j];

(//printf('%d ',j );

//return t;

if(JT.length ) )。

{printf('%d ',i-T.length );

printf(%d(n ),i-T.length m-1; }

else

printf(-1(n );

}

//KMP算法移动次数比较

int Index健康的月光(SString S,SString T,int pos ) )。

{

int next[255]; int x; //存储上一个j值

int t=1; //计数

get_next(t,next );

打印((n );

int i=pos;

int j=1;

wile(I=s.lengthj=t.length ) )。

{

x=j;

if(j==0||s.ch[I-1]==t.ch[j-1] )

{

}

else

j=next[j];

if(j=t.length )。

{

if(x==0);

else

t;

}

printf('%d ',j );

}

返回t;

/*if(JT.length ) ) ) ) ) ) )。

{printf('%d ',i-T.length ); }

else

打印(-1 ); */

}

int Index悲伤的大衣(SString S,SString T,int pos ) ) )。

{

int i,j; int t=1; //j记录移动的次数

int c; //存储上一个j值

i=pos; j=1;

wile(I=s.lengthj=t.length ) )。

{

c=j;

if(s.ch[I-1]==t.ch[j-1] ) I; j; }

else{i=i-j 2; j=1; }

printf('%d ',j );

if(j=t.length )。

t;

}

返回t;

}

int main () )

{

SString S,t;

GETS(s.ch );

GETS(t.ch );

s.Length=Strlen(s.ch );

t.Length=Strlen(t.ch );

//printf(kmp比较的次数为%d(n )、Index健康月光) s、t、1 ) );

//printf(BF比较的次数为%d(n ),索引悲伤外套) s,t,1 ) );

//Index健康的月光(s,t,1 );

printf('%d ',Inder_common健康月光(s,t,1 );

Index_interesting (;

返回0;

}

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。