You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

请求实现支持多元素模式列表的朴素模式匹配算法

支持多元素模式列表的朴素匹配算法实现

你的原search函数核心逻辑其实已经支持多元素模式列表,问题出在你修改后的驱动代码上——多余的嵌套循环和缩进错误导致函数无法正常执行。下面是修正后的完整实现:

def search(pat, txt):
    M = len(pat)
    N = len(txt)
    matches = []
    
    # 滑动模式窗口遍历文本列表
    for i in range(N - M + 1):
        j = 0
        # 逐一对比当前窗口与模式的元素
        while j < M:
            if txt[i + j] != pat[j]:
                break
            j += 1
        # 若所有元素匹配,记录起始索引
        if j == M:
            matches.append(i)
    return matches

# 测试代码
if __name__ == '__main__':
    txt = ["GA","07","09","07","0H"]
    pat = ["GA","09","0H"]
    
    matched_indices = search(pat, txt)
    if matched_indices:
        print(f"Pattern found at indices: {matched_indices}")
    else:
        print("No matching pattern found")

关键说明

  1. 原函数逻辑有效性:原search函数的滑动窗口对比逻辑,天然支持多元素模式——只要模式长度M小于等于文本长度N,就会逐个窗口检查元素是否完全匹配。
  2. 驱动代码修正:去掉了多余的嵌套循环,直接调用search函数即可,避免重复执行和逻辑混乱。
  3. 优化点:将直接打印改为返回匹配索引列表,方便后续对结果的进一步处理。

测试示例

  • 当pat = ["07","09","07"]时,会返回匹配索引[1],因为txt[1:4]正好是["07","09","07"]。
  • 你提供的示例pat = ["GA","09","0H"]在txt中没有连续匹配的序列,所以会输出No matching pattern found。

内容的提问来源于stack exchange,提问作者Xiao Pi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 16:27:23