遍历全部的等式,然后union两头的字母,再遍历不等式,然后find两头的字母的parent,如果之前已经union过二者了,证明等式有矛盾。
class UnionFind: def __init__(self): self.parent = [i for i in range(26)] def find(self, a): if self.parent[a] != a: self.parent[a] = self.find(self.parent[a]) return self.parent[a] def union(self, a, b): pa = self.find(a) pb = self.find(b) if pa == pb:return True if pa != pb: self.parent[pb] = pa return True class Solution: def equationsPossible(self, equations: List[str]) -> bool: equal = [] notequal = [] uf = UnionFind() for q in equations: a,op1,op2,b = q[0], q[1],q[2],q[3] if op1 == '=': equal.append((a, op1, op2, b)) uf.union(ord(a) - ord('a'), ord(b) - ord('a')) elif op1 == '!': notequal.append((a, op1, op2, b)) for a, op1, op2, b in notequal: pa = uf.find(ord(a) - ord('a')) pb = uf.find(ord(b) - ord('a')) if pa == pb:return False return True
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)