class Solution:
"""
@param org: a permutation of the integers from 1 to n
@param seqs: a list of sequences
@return: true if it can be reconstructed only one or false
"""
def sequenceReconstruction(self, org, seqs):
# construct graph
edges = {}
degrees = {}
nodes = set()
for x in org:
edges[x] = []
degrees[x] = 0
for s in seqs:
nodes |= set(s)
for i in range(len(s) - 1):
edges[s[i]].append(s[i+1])
if s[i+1] in degrees:
degrees[s[i+1]] += 1
else:
return False
# push 0 indegree to queue
queue = []
answer = []
for k, v in degrees.items():
if v == 0:
queue.append(k)
#BFS
while len(queue) == 1:
num = queue.pop(0)
answer.append(num)
for e in edges[num]:
degrees[e] -= 1
if degrees[e] == 0:
queue.append(e)
return answer == org and len(nodes) == len (org)
重点在建立两个字典上,在建立过程中进行判断