首页 > 解决方案 > 比较两个字符串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。

标签: pythoncomparisonstring-comparisonbrute-force

解决方案


我编写了一些我认为你正在寻找的东西,但我认为你最后错过了一个术语,除非我做错了。模式 = '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

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


推荐阅读