3

リストを指定したpython関数が欲しい

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

文字列 'abc'、つまりリスト内のすべての要素に含まれる最長の部分を返します。mystring[0]最初の一致しない部分文字列が見つかるたびに、のスライスをループして残りの部分と比較し、ループから抜け出すソリューションがあります。ただし、これを行うには、より効率的でエレガントで Pythonic な方法が必要だと思います。

誰かがこれを適切に行う方法を指摘できますか?

4

2 に答える 2

6

あなたが説明したように、あなたは出発点で最大の部分文字列が必要です:

>>> os.path.commonprefix(['abcde', 'abcdf', 'abcef', 'abcnn'])
'abc'
于 2011-10-24T17:11:59.210 に答える
3

「最長の共通部分文字列」があなたが説明している問題であることに気付いたら、必要なものを簡単に見つけることができます。

例: 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]
于 2011-10-24T17:11:25.460 に答える