亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

查找兩個字符串之間的公共子字符串

查找兩個字符串之間的公共子字符串

不負相思意 2019-09-21 14:29:12
我想比較2個字符串并保持匹配,在比較失敗的地方分開。因此,如果我有2個字符串-string1 = applesstring2 = applesesanswer = apples另一個示例,因為字符串可以有多個單詞。string1 = apple pie availablestring2 = apple piesanswer = apple pie我敢肯定有一種簡單的Python方式可以做到這一點,但我無法解決,感謝任何幫助和解釋。
查看完整描述

3 回答

?
慕妹3242003

TA貢獻1824條經驗 獲得超6個贊

它稱為最長公共子串問題。在這里,我提出了一個簡單,易于理解但效率低下的解決方案。為大型字符串生成正確的輸出將花費很長時間,因為該算法的復雜度為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


查看完整回答
反對 回復 2019-09-21
?
莫回無

TA貢獻1865條經驗 獲得超7個贊

為了完整起見,difflib在標準庫中提供了許多序列比較實用程序。例如find_longest_match,當在字符串上使用時,它會找到最長的公共子字符串。使用示例:


from difflib import SequenceMatcher


string1 = "apple pie available"

string2 = "come have some apple pies"


match = SequenceMatcher(None, string1, string2).find_longest_match(0, len(string1), 0, len(string2))


print(match)  # -> Match(a=0, b=15, size=9)

print(string1[match.a: match.a + match.size])  # -> apple pie

print(string2[match.b: match.b + match.size])  # -> apple pie


查看完整回答
反對 回復 2019-09-21
  • 3 回答
  • 0 關注
  • 985 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號