optimization
class Solution:
def canFormArray(self, arr: List[int], pieces: List[List[int]]) -> bool:
""" tc O(len(pieces) + len(arr) ) sc O(len(pieces))
main idea: since both arr and pieces are distinct, we can use first element in one pieces[i] as key and check if we can comcate pieces[i] into arr[j:len(p[i])]
"""
d = {p[0]: p for p in pieces}
concate = []
i = 0
while i < len(arr):
a = arr[i]
if a in d:
len_p = len(d[a])
if arr[i:i+len_p] != d[a]:
return False
i = i+len_p
else: return False
return True
original solution
class Solution:
def canFormArray(self, arr: List[int], pieces: List[List[int]]) -> bool:
""" tc O(len(pieces) + len(arr) ) sc O(len(pieces))
main idea: since both arr and pieces are distinct, we can use first element in one pieces[i] as key and check if we can comcate pieces[i] into arr[j:len(p[i])]
"""
d = {p[0]: p for p in pieces}
concate = []
for a in arr:
if a in d:
concate += d[a]
return arr == concate