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);
}
}
}
心之所向,素履以往 生如逆旅,一苇以航