蛮力算法和字符串匹配?

时间:2017-02-19 21:55:31

标签: python-2.7

我真的很担心如何执行以下操作:

  

您的主程序应该从用户读取两个字符串(一次一个字符串,因此您将有两个单独的字符串)。读取的第一行(字符串)称为文本字符串,第二行(字符串)称为模式字符串。

     

然后,您将实现一个名为 match 的函数,该函数实现简单的强力模式匹配。此函数接受两个字符串(文本字符串和模式字符串),如果模式字符串匹配文本字符串的某些部分,则返回True:否则,函数返回False

     

您的主程序必须继续执行以下任务:向用户询问文本字符串和模式字符串,并打印一条消息,指出是否在文本中找到了该模式。当用户输入 qqq 作为文本字符串时,程序将停止(无论字母如何,您的程序都必须停止)。

到目前为止,我输入的代码都没有。请帮帮我!

1 个答案:

答案 0 :(得分:0)

所以我想我已经写了一个非常有用的程序,可以帮助你。正如@Scovetta所提到的,我们可以使用Python的in运算符。但是,如果你坚持使用暴力方法而不使用Python的优秀语法糖,那么你绝对可以做到这一点。

这是我写的一个示例程序。如果这有帮助,请告诉我!随意提出您可能遇到的任何问题。

# This program is just going to find if a string contains a substring

def match(text, pattern):
    '''
    Simple match program
    '''
    if pattern in text:
        return True
    else:
        return False

test_cases = [['ab', 'bab'], ['cat', 'catdog'], ['banana', 'apple'], ['tree', 'tree']]

def brute_match(text,pattern):
    '''
    We just want to check that our text has our pattern
    So let's just iterate over our text
    '''
    length_of_pattern = len(pattern)
    for i in range(len(text)):
        # Abuse python's splicing because we don't have to worry about end of the string nonsense 
        if text[i:length_of_pattern+i] == pattern:
            return True
    return False


for case in test_cases:
    ans = match(case[1], case[0])
    bans = brute_match(case[1], case[0])
    print("{} is in {} (T/F): {}".format(case[0], case[1], ans))
    print("{} is in {} (T/F): {}".format(case[0], case[1], bans))


# Enter your main program 
# We want to loop infinitely unless we get qqq
while True:
    text_string = raw_input("Please enter your text string: ")
    if text_string == 'qqq':
        break
    pattern_string = raw_input("Please enter your pattern string: ")
    print("Using 'in' operator:")
    print('-'*20)
    if match(text_string):
        print("IS a valid match")
    else:
        print("NOT a valid match")
    print("Using brute force:")
    print('-'*20)
    if brute_match(text_string):
        print("IS a valid match")
    else:
        print("NOT a valid match")

我意识到代码有点混乱,但我只是想快速写出你的代码!

如果您有任何问题,请与我们联系。