字符串匹配算法(Python)

BF(暴力搜索算法)

将两个串 A 和串 B,依次循环实现两个串的模式匹配过程

def BF(s,p):
	# 判断串p在不在串s中
	n1 = len(s)
	n2 = len(p)
	i,j = 0,0
	while i < n1 and j < n2:
		if s[i] == p[j]:
			i += 1
			j += 1
		else:
			i = i - j + 1
			j = 0
	if j == n2:
		return i - j
	else:
		return -1

if __name__ == "__main__":
	result = BF("abcab","cab")
	print(result)
"""
results:
	2
"""

KMP算法

KMP算法原理讲解

大家可以看上面链接的视频,来了解KMP算法的原理,下面是代码

def get_next(p):
	next = [0]
	now = 0
	x = 1
	while x < len(p):
		if p[now] == p[x]:
			now += 1
			x += 1
			next.append(now)
		elif p[now] != p[x] and now != 0:
			now = next[now-1]
		elif p[now] != p[x] and now == 0:
			next.append(0)
			x += 1
	return next

def KMP(s,p):
	i,j = 0,0
	next = get_next(p)
	while i < len(s) and j < len(p):
		if s[i] == p[j]:
			i += 1
			j += 1
		elif s[i] != p[j] and j != 0:
			j = next[j-1]
		elif s[i] != p[j] and j == 0:
			i += 1
	
	if j == len(p):
		return i-j
	else:
		return -1

if __name__ == "__main__":
	result = KMP("abcab","cab")
	print(result)
  • 3
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值