比较两个字符串列表 python 时计算比较的次数

Count the number of comparison when compare two lists of string python

我有作业做不对,也不确定代码有什么问题。

练习是: 通过简单搜索或蛮力查找我们进行了多少次比较:

我们有 2 个包含字母(字符串)的列表,我们比较 them.Print 进行了多少次比较。

示例:

模式=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。

我编写了一些脚本来满足我认为您正在寻找的内容,但我认为您最后漏掉了一个术语,除非我做错了。 模式 = 'ABABC' 文本 = '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

BABAC -> 1

ABACA -> 4

BACAB -> 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))

输出与之前相同,但还包含:

Total count: 17

这是您要找的吗?我可以解释你不明白的部分:)