每日算法2:KMP字符串匹配算法

本文介绍了一种在匹配串中寻找特定模式的算法,并提供了AS3语言的实现代码。该算法通过计算模式系数,辅助进行字符串匹配,提高搜索效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

目标:在匹配串存在多种模式情况下的匹配算法

算法思路分析:

匹配串

                         abcsabcca
主串移动数     012345678 右移
匹配串移动数 000012301 左移


C语言实现:

as3实现:

var str:String="abcabcsacabcsabcaabcsabccaaa"
var substr:String="abcsabcca"
var modeArr:Array=[0]
// 计算模式系数
function getModeArr(str:String):void
{
for (var k:int=1;k<substr.length;k++)
{
    if(substr.charAt(0)==substr.charAt(k))
    {
        modeArr.push(1)
        for(var m:int=1;m<substr.length-k;m++)
        {
            if(substr.charAt(0+m)==substr.charAt(k+m))
                 modeArr.push(m+1)
            else
               k=k+m-1
        }
    }
    else
       modeArr.push(0)
    
       
}
}

// 模式匹配
function modeMatch(str:String,substr:String):Boolean
{
    getModeArr(substr)
for(var i:int=0;i<str.length;i++)
{
  for(var j:int=0;j<substr.length;j++)
  {
    if(str.charAt(i)!=substr.charAt(j+modeArr[j]))
      i=i+j
    else
    {
      if(j==substr.length-1)
        return true
     }
  }
    
}
return false
}



//进行模式匹配
trace(modeMatch(str,substr))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值