字符串匹配算法:查找子字符串首次出现的位置

给定一个字符串 s 和一个字符串 n,在 s 字符串中找出 n 字符串出现的第一个位置(从 0 开始)。如果不存在,则返回 -1。

算法分析:

  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
  1. KMP算法:

KMP算法是一种高效的字符串匹配算法。其基本思想是利用已知信息来避免无效的比较,即在匹配过程中,当出现不匹配时,不需要从头开始匹配,而是利用已匹配的信息,将模式串向右移动一定的位数,再进行匹配。具体实现可以参考 KMP算法的相关资料。

时间复杂度为 O(m+n)。

  1. Boyer-Moore算法:

Boyer-Moore算法也是一种高效的字符串匹配算法。其基本思想是从模式串的末尾开始匹配,依次向前比较,当出现不匹配时,根据已匹配的信息进行移动。具体实现可以参考 Boyer-Moore算法的相关资料。

时间复杂度为 O(m+n)。

字符串匹配算法:查找子字符串首次出现的位置

原文地址: https://www.cveoy.top/t/topic/oo4u 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录