目标:在匹配串存在多种模式情况下的匹配算法
算法思路分析:
匹配串
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))