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 @ 2022-02-08 17:05  Tianyiya  阅读(47)  评论(0)    收藏  举报