sunday算法

/*
    看文章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
}

给TA捐赠
共{{data.count}}人
人已捐赠
其他案例

Strsplit简易示例1

2021-12-2 15:32:16

其他

SymLink

2021-12-2 15:32:29

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索