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

时间:2019-02-26 18:33:14

标签: python comparison string-comparison 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,但移位1。

1 个答案:

答案 0 :(得分: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))

输出与以前相同的内容,但也带有:

  

总数:17

这是您要找的东西吗?我可以解释一下您不了解的部分:)