上一篇
在计算机科学中,Sunday算法是一种高效的字符串匹配算法,由Daniel M. Sunday于1990年提出。它比经典的KMP和Boyer-Moore算法更简单、直观,并且在很多实际场景中表现更优。本文将带你从零开始,用Python语言实现Sunday算法,即使你是编程小白,也能轻松理解并掌握这一高效字符串搜索技术。
Sunday算法的核心思想是:当发生不匹配时,不是逐个字符移动模式串,而是根据主串中“当前窗口后一个字符”来决定跳转距离。这样可以跳过大量不必要的比较,从而提升效率。

下面是一个完整的、可运行的Python代码实现:
def sunday_search(text, pattern): """ 使用Sunday算法在text中查找pattern 返回第一次匹配的起始索引,未找到返回-1 """ if not pattern: return 0 if len(pattern) > len(text): return -1 # 构建偏移表 shift_table = {} pattern_len = len(pattern) for i in range(pattern_len): # 记录每个字符最右边出现的位置到末尾的距离 shift_table[pattern[i]] = pattern_len - i i = 0 # 主串中的起始位置 while i <= len(text) - pattern_len: # 检查当前窗口是否匹配 match = True for j in range(pattern_len): if text[i + j] != pattern[j]: match = False break if match: return i # 找到匹配 # 查看主串中“窗口后一个字符” next_char_index = i + pattern_len if next_char_index >= len(text): break next_char = text[next_char_index] # 根据偏移表决定跳转距离 if next_char in shift_table: i += shift_table[next_char] else: i += pattern_len + 1 return -1 # 未找到# 测试示例if __name__ == "__main__": text = "Hello, welcome to the world of Sunday algorithm!" pattern = "Sunday" index = sunday_search(text, pattern) print(f"Pattern found at index: {index}") # 输出: Pattern found at index: 28shift_table 是偏移表,例如对于模式串 "abcab",字符 'a' 的偏移值是 5 - 3 = 2(因为最右边的 'a' 在索引3)。text[i + len(pattern)] 这个字符。len(pattern) + 1 位,避免无效比较。相比其他字符串匹配算法,Sunday算法具有以下优势:
通过本教程,你已经学会了如何用Python语言实现Sunday算法进行高效字符串搜索。无论你是准备面试,还是开发文本处理工具,掌握这一算法都将大有裨益。记住,Sunday算法的关键在于“聪明地跳过不可能匹配的位置”,从而减少比较次数。
赶快动手试试吧!修改上面的代码,在自己的项目中应用这个强大的字符串匹配技术。
本文由主机测评网于2025-12-13发表在主机测评网_免费VPS_免费云服务器_免费独立服务器,如有疑问,请联系我们。
本文链接:https://www.vpshk.cn/2025127015.html