我正在尝试使用Python编写子列表搜索算法。
供参考: https://www.geeksforgeeks.org/sublist-search-search-a-linked-list-in-another-list/
这是我的代码:
def sublist(arr1,arr2):
i = 0
j = 0
k = 0
if len(arr1) == 0:
print('List1 Empty')
if len(arr2) == 0:
print('List 2 Empty')
for j in range(0,len(arr2)):
for i in range(0,len(arr1)):
if arr1[i] != arr2[j]:
break
while arr1[i] == arr2 [j]:
if i == len(arr1) - 1:
return True
i = i + 1
j = j + 1
if i == len(arr1):
return False
return False
我确信此代码可以优化并减少时间复杂度。由于while循环,复杂度是否比O(m * n)增加?初学者在这里
答案 0 :(得分:1)
我认为这种方法效果更好:
def sublist(arr1,arr2):
"This fuction checks if arr1 is a sublist of arr2."
for i in range(len(arr2)):
part=arr2[i:] # part is a list which all the elements from i to the end of arr2
if len(part)<len(arr1):
return False
if arr1==part[:len(arr1)]: # if arr1 is in the beginning of part return True
return True
return False
答案 1 :(得分:1)
以下内容将arr2
的第一部分与arr1
进行比较,以确定它们是否相等。如果是这样,或者对arr2
的某个偏移量的任何递归调用都返回true,然后返回true。否则,如果原始arr2
的子列表在任何时候都短于arr1
,则返回False。
def sublist(arr1, arr2):
if len(arr2) < len(arr1):
return False
return arr1 == arr2[:len(arr1)] or sublist(arr1, arr2[1:])