lua比较高效的string.find

最近在看resty.waf包,看到一个lua实现的比较高效的字符串非正则匹配代码,相比string.find在100万次简单字符串匹配快一倍,具体实现代码如下:

function _M.str_match(input, pattern)
if (type(input) == ‘table’) then
for _, v in ipairs(input) do
local match, value = _M.str_match(v, pattern)

        if (match) then
            return match, value
        end
    end
else
    local n, m = #input, #pattern

    if m > n then
        return
    end

    local char = {}

    for k = 0, 255 do char[k] = m end
    //这边是关键
    for k = 1, m-1 do char[pattern:sub(k, k):byte()] = m - k end

    local k = m
    while k <= n do
        local i, j = k, m

        while j >= 1 and input:sub(i, i) == pattern:sub(j, j) do
            i, j = i - 1, j - 1
        end

        if j == 0 then
            return true, input
        end
        //这边是关键
        k = k + char[input:sub(k, k):byte()]
    end

    return false, nil
end

return false, nil

end

其他语言也可以实现一套这个的string.find的逻辑