实验六:编写一个程序,利用kmp算法求子串t在主串s中出现的次数,并以s="aaabbdaabbd
时间: 2023-12-11 19:00:28 浏览: 71
编写程序使用KMP算法求解子串t在主串s中出现的次数是一个比较简单的任务。首先我们需要了解KMP算法的基本原理:通过构建一个部分匹配表(即next数组),来提前计算出在匹配失败时,模式串需要向右移动的位置。
下面是一个使用KMP算法求解子串t在主串s中出现次数的简单实现:
```python
def compute_next(pattern):
m = len(pattern)
next_arr = [0] * m
next_arr[0] = -1
i, j = 0, -1
while i < m-1:
while j >= 0 and pattern[i] != pattern[j]:
j = next_arr[j]
i += 1
j += 1
next_arr[i] = j
return next_arr
def kmp_count_occurrences(s, t):
n, m = len(s), len(t)
next_arr = compute_next(t)
i, j, count = 0, 0, 0
while i < n:
while j >= 0 and s[i] != t[j]:
j = next_arr[j]
i += 1
j += 1
if j == m:
count += 1
j = next_arr[j]
return count
if __name__ == '__main__':
s = "aaabbdaabbd"
t = "aab"
count = kmp_count_occurrences(s, t)
print("子串t在主串s中出现的次数为", count)
```
以上程序中的compute_next函数用于计算模式串t的部分匹配表,kmp_count_occurrences函数使用KMP算法进行子串t在主串s中的匹配,并返回出现的次数。在函数的主程序中,我们定义了s="aaabbdaabbd"作为主串s,t="aab"作为子串t,并通过kmp_count_occurrences函数计算出现次数。
执行以上程序,会输出:子串t在主串s中出现的次数为 2,表示子串"aab"在主串"aaabbdaabbd"中出现了两次。
希望以上回答对您有帮助!