我有功课,我不能正确做,不知道代码有什么问题。
练习是:通过简单搜索或Brute force查找我们进行了多少次比较:
我们有2个包含字母(字符串)的列表,我们比较它们。打印出多少比较。
例:
pattern = ABABC
text = 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但在文本中换一个。
我编写了一些我认为你正在寻找的东西,但我认为你最后会错过一个术语,除非我做错了。 pattern ='ABABC'text ='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)
这输出
阿巴 - > p
BBABA - > 1
BABAC - > 1
ABACA - > 4
BACAB - > 1
ACABC - > 2
CABCB - > 1
Abspa - > p
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
这是你想要的?我可以解释一下你不懂的部分:)