字符串匹配算法:查找子字符串首次出现的位置
字符串匹配算法:查找子字符串首次出现的位置
给定一个字符串 s 和一个字符串 n,在 s 字符串中找出 n 字符串出现的第一个位置(从 0 开始)。如果不存在,则返回 -1。
算法分析:
- 暴力法:
对于 s 字符串中的每个字符,检查其是否与 n 字符串的第一个字符相等,如果相等,则判断后面的字符是否都相等,如果都相等,则返回该位置。
时间复杂度为 O(m*n),其中 m 为 s 字符串长度,n 为 n 字符串长度。
def brute_force_search(s, n):
m = len(s)
n = len(n)
for i in range(m - n + 1):
j = 0
while j < n and s[i + j] == n[j]:
j += 1
if j == n:
return i
return -1
测试用例:
print(brute_force_search('hello world', 'world')) # 输出:6
print(brute_force_search('hello world', 'hello')) # 输出:0
print(brute_force_search('hello world', 'foobar')) # 输出:-1
- KMP算法:
KMP算法是一种高效的字符串匹配算法。其基本思想是利用已知信息来避免无效的比较,即在匹配过程中,当出现不匹配时,不需要从头开始匹配,而是利用已匹配的信息,将模式串向右移动一定的位数,再进行匹配。具体实现可以参考 KMP算法的相关资料。
时间复杂度为 O(m+n)。
- Boyer-Moore算法:
Boyer-Moore算法也是一种高效的字符串匹配算法。其基本思想是从模式串的末尾开始匹配,依次向前比较,当出现不匹配时,根据已匹配的信息进行移动。具体实现可以参考 Boyer-Moore算法的相关资料。
时间复杂度为 O(m+n)。
原文地址: https://www.cveoy.top/t/topic/oo4u 著作权归作者所有。请勿转载和采集!