/*
看文章sunday算法是最快的字符串匹配算法...于是翻译了一个... 感觉上是字符串越长是匹配越快..
*/
main:
src := "阿萨德噶数量的感觉爱丽丝的(这里有一段)价格阿萨德刚阿萨德挨饿受冻发挥高速---从这里找一个---人员哈二月红阿尔山三代人返回收到货深度融合刚"
part := "---从这里找一个---"
ret := Sunday(src, part)
msgbox, % "搜索结果: " (ret)
. (ret ? ( ",被匹配字符串: " substr(src, ret, strlen(part))) : "")
return
Sunday(src, part) {
_shift := {}
sLen := strlen(src)
pLen := strlen(part)
jumpLen := pLen + 1
loop, parse, % part
_shift[A_LoopField] := pLen - A_Index + 1
sPos := 1 ;~ 当前在主串匹配的位置
while ( sLen - pLen + 1 >= sPos) {
pPos := 1
loop {
sChar := substr(src , sPos + pPos - 1 , 1)
pChar := substr(part, pPos , 1)
pPos += 1
if (sChar == pChar)
{
if (pPos > pLen)
return sPos
}
Else
break
}
keyPos := substr(src, sPos + pLen, 1)
if (_shift.haskey(keyPos))
sPos += _shift[keyPos]
else
sPos += jumpLen
}
return 0
}
暂无讨论,说说你的看法吧