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

问题描述 投票:-1回答:1

我有功课,我不能正确做,不知道代码有什么问题。

练习是:通过简单搜索或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但在文本中换一个。

python comparison string-comparison brute-force
1个回答
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

这是你想要的?我可以解释一下你不懂的部分:)

© www.soinside.com 2019 - 2024. All rights reserved.