串的——模式匹配算法

本文介绍了两种模式匹配算法:一般的模式匹配算法和KMP算法。对于一般的算法,通过两个嵌套循环进行字符串比较,当找到匹配开始字符时,再逐个比较剩余字符。而KMP算法则进行了改进,避免了不必要的字符回溯,提高了效率。
摘要由CSDN通过智能技术生成

一:一般的模式匹配算法
第一趟 a b a b c a b c a c b a b                         

              a b c a c                                                         

第二趟 a  b  a  b c a b c a c b a b

                  a  b  c a c

第三趟 a b  a  b c a b c a c b a b
                     a  b c a c

第四趟 a   b   b c a b c a c b a b
                      a b c a c

第五趟 a b a b c a b c a c b a b
                          a b c a c

第五趟 a b a b c a b c a c b a b
                            a b c a c

 算法描述:(必定要用二次循环,因为每比一次要用for循环一 次,二需要比较多次,所以必定要用二个  for嵌套循环)

设串A、B分别用数组aa[100]与数组bb[100]存储

第一种描述方法:

    for(int i=0;i<n;i++)

  {

       if(aa[i]==bb[0])

     {

         k=i;

          for(int j=0;j<m;i++;j++)

         {  if(aa[k]!=bb[j]) break;

         }

         if(j==m) printf("is found in aa")

     }

第二种描述方法:

 int Normal(int pos)
{
 int i,j;
 i=pos;j=0;
 while(s[i]!=0&&j<length)
 {
  if(s[i]==t[j]){i++;j++;}
  else{i=i-j+1;j=0;}
 }
 if(j==length)
  return i-length;
 else
  return -1;
}        

二:改进的模式匹配算法(KMP算法)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值