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>
目录
相关文章
|
JSON 数据格式
uniapp自定义头部导航样式
uniapp自定义头部导航样式
529 0
|
Android开发
autojs下拉刷新
牙叔教程 简单易懂
1184 0
|
虚拟化
【错误记录】VMware 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
【错误记录】VMware 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
8484 0
【错误记录】VMware 虚拟机报错 ( 虚拟化性能计数器需要至少一个可正常使用的计数器, 模块 “VPMC“ 启动失败 , 未能启动虚拟机 )
|
SQL 关系型数据库 分布式数据库
PolarDB产品使用问题之如何查看并进入您的PolarDB-X 2.0集群
PolarDB产品使用合集涵盖了从创建与管理、数据管理、性能优化与诊断、安全与合规到生态与集成、运维与支持等全方位的功能和服务,旨在帮助企业轻松构建高可用、高性能且易于管理的数据库环境,满足不同业务场景的需求。用户可以通过阿里云控制台、API、SDK等方式便捷地使用这些功能,实现数据库的高效运维与持续优化。
|
前端开发
浏览器接收Long型数据精度丢失问题的解决方案
浏览器接收Long型数据精度丢失问题的解决方案
|
前端开发
CSS 鼠标样式和手指样式
巧合要用到鼠标样式效果,就顺便整理了下十五种CSS鼠标样式,小例子供大家使用啊。CSS鼠标样式语法如下: 任意标签中插入 style="cursor:*"   例 子:&lt;span style="cursor:*"&gt;文本或其它页面元素&lt;/span&gt;  &lt;a href="#" style="cursor:*"&gt;文本或其它页面元素&lt;/a&gt;
2112 0
|
机器学习/深度学习 自然语言处理 算法
GPT-3 vs Bert vs GloVe vs Word2vec 文本嵌入技术的性能对比测试
本文将GPT3与三种传统文本嵌入技术GloVe、Word2vec(Mikolov ,2013 年)和 BERT生成的嵌入进行性能的简单对比。
941 0
GPT-3 vs Bert vs GloVe vs Word2vec 文本嵌入技术的性能对比测试
|
存储 Kubernetes 监控
理论篇:让我们一起鲁克鲁克——rook(开源存储编排)
理论篇:让我们一起鲁克鲁克——rook(开源存储编排)
1180 0
|
存储 达摩院 Cloud Native
阿里云GanosBase重磅升级,发布首个云孪生时空数据库
GanosBase是李飞飞带领的达摩院数据库与存储实验室联合阿里云共同研发的新一代位置智能引擎;本次重磅升级为V4.0版本,推出首个云孪生时空数据库。
738 0
阿里云GanosBase重磅升级,发布首个云孪生时空数据库