请求实现支持多元素模式列表的朴素模式匹配算法
支持多元素模式列表的朴素匹配算法实现
你的原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")
关键说明
- 原函数逻辑有效性:原
search函数的滑动窗口对比逻辑,天然支持多元素模式——只要模式长度M小于等于文本长度N,就会逐个窗口检查元素是否完全匹配。 - 驱动代码修正:去掉了多余的嵌套循环,直接调用
search函数即可,避免重复执行和逻辑混乱。 - 优化点:将直接打印改为返回匹配索引列表,方便后续对结果的进一步处理。
测试示例
- 当
pat = ["07","09","07"]时,会返回匹配索引[1],因为txt[1:4]正好是["07","09","07"]。 - 你提供的示例
pat = ["GA","09","0H"]在txt中没有连续匹配的序列,所以会输出No matching pattern found。
内容的提问来源于stack exchange,提问作者Xiao Pi
相关产品推荐
相关产品推荐

