python - 比较两个字符串python列表时计算比较次数
问题描述
我有作业无法正确完成,并且不确定代码有什么问题。
练习是:通过简单的搜索或蛮力找出我们做了多少比较:
我们有 2 个包含字母(字符串)的列表,我们对它们进行比较。打印出进行了多少次比较。
例子:
模式= ABABC
文本= ABBABACABCBAC
我是如何尝试的:
def search(text,pattern):
text=list(text)
pattern=list(pattern)
n=len(text)
m=len(pattern)
co=1
l=0
k=0
while k<=m:
if text[l] == pattern[k]:
co+=1
l+=1
k+=1
else:
co+=1
l+=1
k=0
c=co
return "Simple matching made " + str(c) +"
comparisons"
它应该是 16,因为我们按字母比较,类似 3+1+1+4+1+2+1+3
我们得到 3:A=A 表示 +1,B=B 表示 1,
B 不是 A,所以我们添加 +1,但在文本中移动 1。
解决方案
我编写了一些我认为你正在寻找的东西,但我认为你最后错过了一个术语,除非我做错了。模式 = 'ABAABC' 文本 = 'ABBABACABCBAC'
def search(text, pattern):
slices = len(text) - len(pattern)
for i in range(0, slices + 1):
count = 0
text_to_compare = text[i:i + len(pattern)]
for j in range(len(pattern)):
count += 1
if pattern[j] == text_to_compare[j]:
continue
else:
break
print("{} -> {}".format(text_to_compare, count))
search(text, pattern)
这输出
ABBAB -> 3
BBABA -> 1
巴巴克 -> 1
ABACA -> 4
巴卡布 -> 1
ACABC -> 2
CABCB -> 1
ABCBA -> 3
BCBAC -> 1
它可以适应总计数,例如:
def search(text, pattern):
total_count = 0
slices = len(text) - len(pattern)
for i in range(0, slices + 1):
count = 0
text_to_compare = text[i:i + len(pattern)]
for j in range(len(pattern)):
count += 1
total_count += 1
if pattern[j] == text_to_compare[j]:
continue
else:
break
print("{} -> {}".format(text_to_compare, count))
print("Total count: {}".format(total_count))
其输出与以前相同,但也具有:
总数:17
这是你想要的?我可以解释你不明白的部分:)
推荐阅读
- python - 使用 Sympy 的矩阵导数
- php - WordPress/PHP 获取主导航中所有链接的列表
- javascript - jQuery datepicker 在段落中不起作用
- php - 在 WooCommerce 单品上动态设置和显示自定义产品变体值
- spf - SPF查找太多?
- python - 构造大小相等的集合,其中每个笛卡尔积的乘积都是唯一的
- django - Django模型:如何一次过滤多个值?
- sql - 如何在 HackerRank 上使用 SQL 查找折扣最大的产品
- reactjs - 你需要为 Plotly Dash Python 安装 React 吗?
- python - 尝试对成员进行 dm 时,discord bot 返回“列表索引超出范围”