-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy path0990-satisfiability-of-equality-equations.js
More file actions
60 lines (55 loc) · 1.8 KB
/
0990-satisfiability-of-equality-equations.js
File metadata and controls
60 lines (55 loc) · 1.8 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
/**
* Satisfiability Of Equality Equations
* Time Complexity: O(N * α(26))
* Space Complexity: O(26)
*/
var equationsPossible = function (equations) {
const totalAlphabetCount = 26;
const asciiOffset = 97;
const disjointSetParents = new Array(totalAlphabetCount);
for (
let currentLetterIndex = 0;
currentLetterIndex < totalAlphabetCount;
currentLetterIndex++
) {
disjointSetParents[currentLetterIndex] = currentLetterIndex;
}
const retrieveSetRepresentative = (nodeIdentifier) => {
if (disjointSetParents[nodeIdentifier] !== nodeIdentifier) {
disjointSetParents[nodeIdentifier] = retrieveSetRepresentative(
disjointSetParents[nodeIdentifier],
);
}
return disjointSetParents[nodeIdentifier];
};
const mergeVariableSets = (identifierOne, identifierTwo) => {
const rootOne = retrieveSetRepresentative(identifierOne);
const rootTwo = retrieveSetRepresentative(identifierTwo);
if (rootOne !== rootTwo) {
disjointSetParents[rootOne] = rootTwo;
}
};
for (const equalityCheckString of equations) {
if (equalityCheckString[1] === "=") {
const firstCharacterIndex =
equalityCheckString[0].charCodeAt(0) - asciiOffset;
const secondCharacterIndex =
equalityCheckString[3].charCodeAt(0) - asciiOffset;
mergeVariableSets(firstCharacterIndex, secondCharacterIndex);
}
}
for (const inequalityCheckString of equations) {
if (inequalityCheckString[1] === "!") {
const leftVarIndex = inequalityCheckString[0].charCodeAt(0) - asciiOffset;
const rightVarIndex =
inequalityCheckString[3].charCodeAt(0) - asciiOffset;
if (
retrieveSetRepresentative(leftVarIndex) ===
retrieveSetRepresentative(rightVarIndex)
) {
return false;
}
}
}
return true;
};