2017-10-15 115 views
1

好的,请原谅我的问题,它可能没有以最好的方式问!确定字符串列表中的子串集合

我在字典中有一组56个条目。这些键表示由字典中的字符串表示的功能组合。我根据特性将字符串字典细分为集合,并将这些值放入列表中。我的代码工作到这一点。

我现在有困难了解如何将列表中的每个字符串相互比较以找出最大共享字符串是什么。所以,我的名单看起来像:

[ngali,ngali,ngalina,ngalina,ngina,ngina,nginana]

所以 'NG' 是我在这种情况下,后是。到目前为止,我只能找到参考找到像Levinshtein和fuzz之类的字符串距离。

是否有任何'整洁'的方式来编码这个或我注定要编写嵌套循环嵌套循环,以通过所有可能的组合?

我使用Python 3

+0

它看起来像你实现最长公共子串的(它似乎前与子)的变化。也许这将是有用的? https://en.wikibooks.org/wiki/Algorithm_Implementation/Strings/Longest_common_substring#Python_3 – Raizuri

+1

所以我早先通读了这篇文章,如果我错了,请纠正我的错误,但是如果代码片段从最开始的时候才会找到最长的公共子字符串这个词的开头,在我看来,它可能在这个词的任何地方。我猜我将不得不创建另一个循环,以考虑滑动起点...... – Ant

回答

-1
from os.path import commonprefix 
l = ['ngali','ngali','ngalina','ngalina','ngina','ngina','nginana'] 
commonprefix(l) 
+0

我不只是寻找共同的前缀,我需要能够找到最长的常见字符串,无论它在这个词中的位置。在另一组中,我将不得不看看['ngalina','nginana']这样的词,并找到'na',而在其他情况下,该字符串将位于该词的中心。 – Ant

+0

@你想要的'ng';至少有礼貌不要downvote – skrubber

+0

我没有downvote,我不知道谁downvoted。至少我不认为我做过,我是新手,所以如果我做了,我表示歉意。 – Ant