字符串匹配问题 kmp算法C语言实现

《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》
/**/
/*
《字符串匹配问题 kmp算法C语言实现》NO.1
《字符串匹配问题 kmp算法C语言实现》O(n^2)的算法:
《字符串匹配问题 kmp算法C语言实现》
*/


《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》

/**/
/*枚举主串的每一个位置开始比较*/

《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》#include 

<
stdio.h
>

《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》

#define
 MAX 101

《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》

int
 main(
void
)
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》


{
《字符串匹配问题 kmp算法C语言实现》    
char a[MAX],b[MAX];
《字符串匹配问题 kmp算法C语言实现》    
int la=0,lb=0,i,j,k ;
《字符串匹配问题 kmp算法C语言实现》    
char c  ;
《字符串匹配问题 kmp算法C语言实现》     
《字符串匹配问题 kmp算法C语言实现》    
while ( (c =getchar())!=  )
《字符串匹配问题 kmp算法C语言实现》    a[
++la] = c ;
《字符串匹配问题 kmp算法C语言实现》    
while ( (c =getchar())!=  )
《字符串匹配问题 kmp算法C语言实现》    b[
++lb] = c ;
《字符串匹配问题 kmp算法C语言实现》    
《字符串匹配问题 kmp算法C语言实现》    
for(i=1 ; i<=la ; i++)
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》    
{
《字符串匹配问题 kmp算法C语言实现》            
for(j=1,k=i; j<= lb && (b[j] == a[k]) ; j++,k++) ;
《字符串匹配问题 kmp算法C语言实现》            
if ( j > lb )
《字符串匹配问题 kmp算法C语言实现》            
break ;
《字符串匹配问题 kmp算法C语言实现》    }

《字符串匹配问题 kmp算法C语言实现》    
《字符串匹配问题 kmp算法C语言实现》    
if ( j > lb)
《字符串匹配问题 kmp算法C语言实现》    printf(
No.%d ,i);
《字符串匹配问题 kmp算法C语言实现》    
else
《字符串匹配问题 kmp算法C语言实现》    printf(
No Soulation!!! );
《字符串匹配问题 kmp算法C语言实现》             
《字符串匹配问题 kmp算法C语言实现》            
《字符串匹配问题 kmp算法C语言实现》    
《字符串匹配问题 kmp算法C语言实现》    system(
pause);   
《字符串匹配问题 kmp算法C语言实现》    
return 0 ;
《字符串匹配问题 kmp算法C语言实现》}


《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》

/**/
/*
《字符串匹配问题 kmp算法C语言实现》No.2  O(a+b) 的算法:该算法是由knuth 等三个人想出来的,简称为:KMP 算法
《字符串匹配问题 kmp算法C语言实现》基本思想是:
《字符串匹配问题 kmp算法C语言实现》一般的算法为什么这么低效呢?那是因为主串指针回溯情况过多:
《字符串匹配问题 kmp算法C语言实现》主串指针如果不回溯的话,速度就会加快,那我们就会想:
《字符串匹配问题 kmp算法C语言实现》如何让主串指针不回溯?
《字符串匹配问题 kmp算法C语言实现》KMP算法就是解决了这个问题,所以速度变得更快速了
《字符串匹配问题 kmp算法C语言实现》它是这样子的:
《字符串匹配问题 kmp算法C语言实现》用一个数组:next[] 求得失配时的位置,然后保存下来,具体请看如下程序:
《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》
*/


《字符串匹配问题 kmp算法C语言实现》

*/

《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》#include 

<
stdio.h
>

《字符串匹配问题 kmp算法C语言实现》#include 

<
stdlib.h
>

《字符串匹配问题 kmp算法C语言实现》#include 

<
string
.h
>

《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》

#define
 MAX 101

《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》

void
 get_next( 
int
 
*
next,
char
 
*
a,
int
 la) 
/**/
/*求NEXT[]的值*/

《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》


{
《字符串匹配问题 kmp算法C语言实现》     
int i=1,j=0 ;
《字符串匹配问题 kmp算法C语言实现》     next[
1= 0 ;
《字符串匹配问题 kmp算法C语言实现》     
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》     
while ( i <= la) /**//*核心部分*/
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》     
{
《字符串匹配问题 kmp算法C语言实现》           
if( a[i] == a[j] || j == 0 )
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》           
{
《字符串匹配问题 kmp算法C语言实现》               j 
++ ;
《字符串匹配问题 kmp算法C语言实现》               i 
++ ;
《字符串匹配问题 kmp算法C语言实现》               
if( a[i] == a[j])
《字符串匹配问题 kmp算法C语言实现》               next[i] 
= next[j];
《字符串匹配问题 kmp算法C语言实现》               
else
《字符串匹配问题 kmp算法C语言实现》               next[i] 
= j ;
《字符串匹配问题 kmp算法C语言实现》           }

《字符串匹配问题 kmp算法C语言实现》           
else
《字符串匹配问题 kmp算法C语言实现》           j 
= next[j] ;
《字符串匹配问题 kmp算法C语言实现》     }

《字符串匹配问题 kmp算法C语言实现》}


《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》

int
  str_kmp( 
int
 
*
next, 
char
 
*
A ,
char
 
*
a, 
int
 lA,
int
 la)
/**/
/* EASY*/

《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》


{
《字符串匹配问题 kmp算法C语言实现》     
int i,j,k ;
《字符串匹配问题 kmp算法C语言实现》     i 
= 1 ;
《字符串匹配问题 kmp算法C语言实现》     j 
= 1 ;
《字符串匹配问题 kmp算法C语言实现》     
while ( i<=lA && j <= la )
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》     
{
《字符串匹配问题 kmp算法C语言实现》           
if(A[i] == a[j] ||  j == 0 )
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》           
{
《字符串匹配问题 kmp算法C语言实现》                   i 
++ ;
《字符串匹配问题 kmp算法C语言实现》                   j 
++ ;
《字符串匹配问题 kmp算法C语言实现》           }

《字符串匹配问题 kmp算法C语言实现》           
else
《字符串匹配问题 kmp算法C语言实现》           j 
= next[j] ;
《字符串匹配问题 kmp算法C语言实现》     }

《字符串匹配问题 kmp算法C语言实现》     
《字符串匹配问题 kmp算法C语言实现》     
if ( j> la)
《字符串匹配问题 kmp算法C语言实现》     
return ij+1 ;
《字符串匹配问题 kmp算法C语言实现》     
else
《字符串匹配问题 kmp算法C语言实现》     
return 1 ;
《字符串匹配问题 kmp算法C语言实现》}


《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》

int
 main(
void
)
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》


{
《字符串匹配问题 kmp算法C语言实现》    
int n,k;
《字符串匹配问题 kmp算法C语言实现》《字符串匹配问题 kmp算法C语言实现》    
int next[MAX]={0} ;
《字符串匹配问题 kmp算法C语言实现》    
int lA=0,la =0 ;
《字符串匹配问题 kmp算法C语言实现》    
char A[MAX],a[MAX] ;
《字符串匹配问题 kmp算法C语言实现》    scanf(
%s %s,A,a) ;
《字符串匹配问题 kmp算法C语言实现》    
《字符串匹配问题 kmp算法C语言实现》    lA 
= strlen(A);
《字符串匹配问题 kmp算法C语言实现》    la 
= strlen(a);
《字符串匹配问题 kmp算法C语言实现》    
for(k=la1; k>= 0 ;k )
《字符串匹配问题 kmp算法C语言实现》    a[k
+1= a[k] ;
《字符串匹配问题 kmp算法C语言实现》    
for(k=lA1; k>= 0 ;k )
《字符串匹配问题 kmp算法C语言实现》    A[k
+1= A[k] ;
《字符串匹配问题 kmp算法C语言实现》    
《字符串匹配问题 kmp算法C语言实现》    get_next(next,a,la) ;
《字符串匹配问题 kmp算法C语言实现》    k 
= str_kmp(next,A,a,lA,la);
《字符串匹配问题 kmp算法C语言实现》    
if ( 1 == k)
《字符串匹配问题 kmp算法C语言实现》    printf(
Not Soulation!!! );
《字符串匹配问题 kmp算法C语言实现》    
else
《字符串匹配问题 kmp算法C语言实现》    printf(
%d ,k) ;
《字符串匹配问题 kmp算法C语言实现》    system(
pause);
《字符串匹配问题 kmp算法C语言实现》    
《字符串匹配问题 kmp算法C语言实现》    
return 0 ;
《字符串匹配问题 kmp算法C语言实现》}


《字符串匹配问题 kmp算法C语言实现》
《字符串匹配问题 kmp算法C语言实现》
 

    原文作者:KMP算法
    原文地址: https://blog.csdn.net/oopos/article/details/1835552
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞