一尘不染

查找两个字符串之间的公共子字符串

algorithm

我想比较2个字符串并保持匹配,在比较失败的地方分开。

因此,如果我有2个字符串-

string1 = apples
string2 = appleses

answer = apples

另一个示例,因为字符串可能包含多个单词。

string1 = apple pie available
string2 = apple pies

answer = apple pie

我敢肯定有一种简单的Python方式可以做到这一点,但是我无法解决,感谢您的帮助和解释。


阅读 157

收藏
2020-07-28

共1个答案

一尘不染

它称为最长公共子串问题。在这里,我提出了一个简单,易于理解但效率低下的解决方案。为大型字符串生成正确的输出将花费很长时间,因为该算法的复杂度为O(N ^
2)。

def longestSubstringFinder(string1, string2):
    answer = ""
    len1, len2 = len(string1), len(string2)
    for i in range(len1):
        match = ""
        for j in range(len2):
            if (i + j < len1 and string1[i + j] == string2[j]):
                match += string2[j]
            else:
                if (len(match) > len(answer)): answer = match
                match = ""
    return answer

print longestSubstringFinder("apple pie available", "apple pies")
print longestSubstringFinder("apples", "appleses")
print longestSubstringFinder("bapples", "cappleses")

输出量

apple pie
apples
apples
2020-07-28