簡體   English   中英

python中字符串的最大公約數

[英]greatest common divisor for strings in python

我想有一個給定列表的python函數

mystrings = ['abcde', 'abcdf', 'abcef', 'abcnn']

返回字符串“ abc”,即列表中所有元素包含的最長塊。 我有一個解決方案,它僅循環遍歷mystring[0]的切片,並將其與其余部分進行比較,並在找到第一個不匹配的子字符串時退出循環。 但是,我懷疑必須有一種更有效,更優雅和Pythonic的方式來做到這一點。

有人可以指出如何正確執行此操作嗎?

按照您描述的方式,您希望在開始時使用最大的子字符串:

>>> os.path.commonprefix(['abcde', 'abcdf', 'abcef', 'abcnn'])
'abc'

一旦意識到“最長的公共子字符串”是您要描述的問題,就可以輕松找到所需的內容:

例如,來自Wikibooks

def LongestCommonSubstring(S1, S2):
    M = [[0]*(1+len(S2)) for i in xrange(1+len(S1))]
    longest, x_longest = 0, 0
    for x in xrange(1,1+len(S1)):
        for y in xrange(1,1+len(S2)):
            if S1[x-1] == S2[y-1]:
                M[x][y] = M[x-1][y-1] + 1
                if M[x][y]>longest:
                    longest = M[x][y]
                    x_longest  = x
            else:
                M[x][y] = 0
    return S1[x_longest-longest: x_longest]

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM