Leetcode 990. Satisfiability of Equality Equations [Python]

遍历全部的等式,然后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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值