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)