Python中两个字符串列表中的公共字符串

Python中两个字符串列表中的公共字符串,python,Python,我有两个字符串列表: a = ['ab','ac','ad',..., 'aba','abc',...] # n = 10000 of unique strings b = ['ab', 'ac', ..., 'ab'] # m = 100 have duplicates c = [] 如何在这两个字符串之间找到公共字符串?我的解决方案以m*n复杂度运行(对吗?): 有没有办法解决O(m)时间复杂度问题?您可以将列表转换为,并使用以下方法对其进行分析: 集合交集返回

我有两个字符串列表:

a = ['ab','ac','ad',..., 'aba','abc',...] # n = 10000 of unique strings
b = ['ab', 'ac', ..., 'ab']               # m = 100 have duplicates
c = []
如何在这两个字符串之间找到公共字符串?我的解决方案以m*n复杂度运行(对吗?):


有没有办法解决O(m)时间复杂度问题?

您可以将列表转换为,并使用以下方法对其进行分析:

集合交集返回两个集合中共同的元素。但是请注意:由于
set
是无序的,如果需要,您将无法维护列表
a
b
中的顺序

这里有一个功能性的方法来实现相同的使用方法:


您可以使用以下方法将列表转换为,并对其执行以下操作:

集合交集返回两个集合中共同的元素。但是请注意:由于
set
是无序的,如果需要,您将无法维护列表
a
b
中的顺序

这里有一个功能性的方法来实现相同的使用方法:


由于
a
中的值是唯一的,因此可以在O(n)中创建一个dict来访问和检查O(1)中的元素

迭代
b
并在O(1)中使用dict检查b的每个元素,然后使用
set
操作将节省时间,还包括
b
a
中是否存在相同的多个相同元素

a = ['ab','ac','ad', 'aba','abc'] # n = 10000 of unique strings
b = ['ab', 'ac', 'ab', 'kk']               # m = 100 have duplicates
c = []


a_dic = {i:1 for i in a}
sol = []

for i in b:
    if a_dic.get(i, None):
        sol.append(i)

由于
a
中的值是唯一的,因此可以在O(n)中创建一个dict来访问和检查O(1)中的元素

迭代
b
并在O(1)中使用dict检查b的每个元素,然后使用
set
操作将节省时间,还包括
b
a
中是否存在相同的多个相同元素

a = ['ab','ac','ad', 'aba','abc'] # n = 10000 of unique strings
b = ['ab', 'ac', 'ab', 'kk']               # m = 100 have duplicates
c = []


a_dic = {i:1 for i in a}
sol = []

for i in b:
    if a_dic.get(i, None):
        sol.append(i)

@托莱格纳扎马特做了这个回答并帮助了你?如果是,请点击答案左侧的“向上”箭头向上投票。您还可以通过点击“勾选”图标将最佳答案标记为已接受。它有助于回答者在每次投票中获得+10的声誉,在被接受的情况下获得+15的声誉answer@TolegenAzamat这个答案对你有帮助吗?如果是,请点击答案左侧的“向上”箭头向上投票。您还可以通过点击“勾选”图标将最佳答案标记为已接受。它有助于回答者在每次投票中获得+10的声誉,在被接受的答案中获得+15的声誉
>>> set(a).intersection(b)
{'ac', 'ab'}
a = ['ab','ac','ad', 'aba','abc'] # n = 10000 of unique strings
b = ['ab', 'ac', 'ab', 'kk']               # m = 100 have duplicates
c = []


a_dic = {i:1 for i in a}
sol = []

for i in b:
    if a_dic.get(i, None):
        sol.append(i)