Python算法:Brute-Force算法查找字符串子串位置

简介: Python算法:Brute-Force算法查找字符串子串位置

d21.2.png

Brute-Force算法,

简称为 BF算法,是一种简单朴素的模式匹配算法,常用于在一个主串 S 内查找一个子串 T 的出现位置。


它的核心思想与操作是:


对于给定的主串 S 与子串 P ,主串 S 的长度为 N,子串 T 的长度为 M ;


首先,将 S[1] 和 T[1] 进行比较;


若相等,则再比较 S[2] 和 T[2] ,一直到 T[M] 为止;


若 S[1] 和 T[1] 不等,则 T 向右移动一个字符的位置,再依次进行比较;

"""
  0 1 2 3 4
S a c b c d
T c d
s = 0 t = 0

S a c b c d
T   c d
s = 1 t = 0

S a c b c d
T   c d
s = 2 t = 1

S a c b c d
T     c d
s = 2 t = 0

S a c b c d
T       c d
s = 3 t = 0

S a c b c d
T       c d
s = 4 t = 1
"""

代码实现

def searchIndex(S, T):

s, t, pos = 0, 0, 0
S_len = len(S)
T_len = len(T)

while (s < S_len and t < T_len):
print(s, t)
if S[s] == T[t]:
s += 1
t += 1
else:
pos += 1
s = pos
t = 0

if t == T_len:
return pos
else:
return -1


print(searchIndex("abdabc", "abc"))
"""
0 0
1 1
2 2
1 0
2 0
3 0
4 1
5 2
3
"""


BF算法 在主串和字串匹配失败时,主串进行的回溯操作会影响效率,回溯之后,主串与字串有些部分比较是没有必要的。这种简单的丢弃前面的匹配信息是 BF算法 之所以效率低效的一个重要因素。



参考:

【数据结构与算法】动画:什么是 BF 算法 ?

            </div>
目录
相关文章
|
算法 大数据 索引
算法查找——分块查找
分块查找是折半查找(二分查找)和顺序查找的一种改进方法,分块查找由于只要求索引表是有序的,对块内节点没有排序要求,因此特别适合于节点动态变化的情况。分块查找的速度虽然不如折半查找算法,但比顺序查找算法快得多,同时又不需要对全部节点进行排序
279 0
算法查找——分块查找
|
算法
算法查找——二分查找
算法查找——二分查找
98 0
算法查找——二分查找
|
算法 前端开发 JavaScript
LeetCode搜索插入位置使用JavaScript解题|前端学算法
前几天做LeetCode算法题,我还说要打十个,今天就被LeetCode狠狠打脸了 算了,难度大的做不出来,咱还做不出来简单的嘛,今天咱们就捡软柿子捏,来找找自信
112 0
LeetCode搜索插入位置使用JavaScript解题|前端学算法
|
存储 Python
python 如何实现数组的间隔排列:每一行比前一行间隔一个位置排列。
最近,在处理一些数据时,由于数据是按照每小时进行采样的,为了保持周期的完整性,需要将同一时刻对应的数据进行平均处理。
python 如何实现数组的间隔排列:每一行比前一行间隔一个位置排列。
|
机器学习/深度学习 传感器 算法
【PID优化】基于正余弦算法 (SCA)优化PID实现微型机器人系统位置控制附simulink模型和matlab代码
【PID优化】基于正余弦算法 (SCA)优化PID实现微型机器人系统位置控制附simulink模型和matlab代码
|
算法 定位技术
枚举地图位置 啊哈,算法上
枚举地图位置 啊哈,算法上
枚举地图位置 啊哈,算法上
|
机器学习/深度学习 存储 Python
python机器学习入门之PIL模块查找图像边缘和滤波处理
python机器学习入门之PIL模块查找图像边缘和滤波处理
457 0
python机器学习入门之PIL模块查找图像边缘和滤波处理
|
Python
Python基础 变量的作用域(python变量的定义位置) 函数(递归函数)斐波那契数列
python变量定义的位置会让变量有不同的作用域,其中包括全局可使用的全局变量,和函数内定义的,只能函数内使用的局部变量。可以用特殊方法使局部变量变成全局变量。
Python基础 变量的作用域(python变量的定义位置)    函数(递归函数)斐波那契数列
|
Linux Python
Linux 服务器查找Python包的路径
Linux 服务器查找Python包的路径
|
数据库 Python
Python 查找两个大文件中不同内容
Python 查找两个大文件中不同内容