# 990. Satisfiability of Equality Equations ⭐

Medium
You are given an array of strings `equations` that represent relationships between variables where each string `equations[i]` is of length `4` and takes one of two different forms: `"xi==yi"` or `"xi!=yi"`.Here, `xi` and `yi` are lowercase letters (not necessarily different) that represent one-letter variable names.
Return `true` if it is possible to assign integers to variable names so as to satisfy all the given equations, or `false` otherwise.
Example 1:
Input: equations = ["a==b","b!=a"]
Output:
false
Explanation:
If we assign say, a = 1 and b = 1, then the first equation is satisfied, but not the second.
There is no way to assign the variables to satisfy both equations.
Example 2:
Input: equations = ["b==a","a==b"]
Output:
true
Explanation:
We could assign a = 1 and b = 1 to satisfy both equations.
Constraints:
• `1 <= equations.length <= 500`
• `equations[i].length == 4`
• `equations[i][0]` is a lowercase letter.
• `equations[i][1]` is either `'='` or `'!'`.
• `equations[i][2]` is `'='`.
• `equations[i][3]` is a lowercase letter.

### 解題

Runtime: 0 ms, faster than 100%
Memory Usage: 0 MB, less than 100%
func equationsPossible(equations []string) bool {
arr := make([]int, 26)
for i:=0; i<26; i++ {
arr[i] = i
}
for _, eq := range equations {
if eq[1] == '!' { continue }
arr[find(arr, int(eq[0] - 'a'))] = find(arr, int(eq[3] - 'a'))
}
for _, eq := range equations {
if eq[1] == '=' { continue }
if arr[find(arr, int(eq[0] - 'a'))] == arr[find(arr, int(eq[3] - 'a'))] {
return false
}
}
return true
}
func find(arr []int, x int) int {
if arr[x] == x {
return x
}
return find(arr, arr[x])
}