亚洲激情专区-91九色丨porny丨老师-久久久久久久女国产乱让韩-国产精品午夜小视频观看

溫馨提示×

lua腳本dzsh算法怎么實現

Lua
小億
102
2023-11-28 15:01:16
欄目: 編程語言

dzsh算法是一種簡化版的Z函數算法,用于字符串匹配和搜索。下面是一個實現dzsh算法的Lua腳本示例:

-- 計算dzsh數組
function computeDZSHArray(pattern)
    local m = #pattern
    local dzsh = {}
    local l, r = 0, 0

    for i = 2, m do
        if i <= r then
            dzsh[i] = math.min(r-i+1, dzsh[i-l+1])
        end
        while i+dzsh[i] <= m and pattern[i+dzsh[i]] == pattern[1+dzsh[i]] do
            dzsh[i] = dzsh[i] + 1
        end
        if i+dzsh[i]-1 > r then
            l, r = i, i+dzsh[i]-1
        end
    end

    return dzsh
end

-- dzsh算法
function dzshSearch(text, pattern)
    local n = #text
    local m = #pattern
    local dzsh = computeDZSHArray(pattern)
    local matches = {}

    local j = 1
    for i = 1, n do
        if text[i] == pattern[j] then
            j = j + 1
            if j > m then
                table.insert(matches, i-m+1)
                j = dzsh[j-1]+1
            end
        else
            if j > 1 then
                j = dzsh[j-1]+1
            end
        end
    end

    return matches
end

-- 測試
local text = "ABABDABACDABABCABAB"
local pattern = "ABABCABAB"
local matches = dzshSearch(text, pattern)

print("Pattern matches:")
for _, match in ipairs(matches) do
    print(match)
end

在上面的代碼中,computeDZSHArray(pattern)函數用于計算dzsh數組,該數組存儲了模式字符串中每個位置開始的最長匹配前綴的長度。dzshSearch(text, pattern)函數用于在文本字符串中搜索模式字符串,并返回匹配的起始位置。

通過調用dzshSearch(text, pattern)函數,可以在文本字符串text中搜索模式字符串pattern,并將匹配的起始位置打印出來。

0
孟州市| 霍州市| 永济市| 乌拉特后旗| 临沂市| 郑州市| 镇沅| 团风县| 崇文区| 金堂县| 额济纳旗| 德阳市| 景宁| 赞皇县| 博野县| 万安县| 驻马店市| 台湾省| 平谷区| 珲春市| 盐边县| 都匀市| 徐闻县| 绥宁县| 新巴尔虎左旗| 祁东县| 夏邑县| 鄂尔多斯市| 陵川县| 维西| 合川市| 宁安市| 江口县| 高青县| 庄浪县| 辉县市| 陕西省| 庆安县| 隆昌县| 景宁| 顺义区|