990. 等式方程的可满足性

给定一个由表示变量之间关系的字符串方程组成的数组,每个字符串方程 equations[i] 的长度为 4,并采用两种不同的形式之一:"a==b" 或 "a!=b"。在这里,a 和 b 是小写字母(不一定不同),表示单字母变量名。

只有当可以将整数分配给变量名,以便满足所有给定的方程时才返回 true,否则返回 false。

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/satisfiability-of-equality-equations
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

import java.util.HashMap;
import java.util.Map;

class Solution {
    public boolean equationsPossible(String[] equations) {
        UnionSet unionSet = new UnionSet();
        for (String equation : equations) {
            char a = equation.charAt(0);
            char b = equation.charAt(3);
            boolean equal = equation.charAt(1) == '=';
            if (equal) {
                unionSet.merge(a, b);
            }
        }

        for (String equation : equations) {
            char a = equation.charAt(0);
            char b = equation.charAt(3);
            boolean equal = equation.charAt(1) == '=';
            if (!equal) {
                if (unionSet.find(a) == unionSet.find(b)) {
                    return false;
                }
            }
        }
        return true;
    }
}

class UnionSet {
    private Map<Character, Character> parentMap = new HashMap<Character, Character>() {{
        for (int i = 0; i < 26; ++i) {
            char c = (char) (i + 'a');
            put(c, c);
        }
    }};


    public Character find(char x) {
        Character parent = this.parentMap.get(x);
        if (parent == x) {
            return parent;
        }
        parent = find(parent);
        parentMap.put(x, parent);
        return parent;
    }

    public void merge(char a, char b) {
        char p1 = find(a);
        char p2 = find(b);
        if (p1 != p2) {
            parentMap.put(p1, p2);
        }
    }

}
posted @   Tianyiya  阅读(41)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示