题目:
第一次思考:
- 经典并查集
实现:
class UnionSet{public:vector<int> parent;public:UnionSet(int n) {parent.resize(n);}void init(int n) {for (int i = 0; i < n; i++) {parent[i] = i;}}int find(int x) {if (parent[x] != x) {parent[x] = find(parent[x]);}return parent[x];}void merge(int x, int y) {int rootX = find(x);int rootY = find(y);if (rootX != rootY) {parent[rootX] = rootY;}}};class Solution {
public:bool equationsPossible(vector<string>& equations) {UnionSet uset(26);uset.init(26);for (auto& s : equations) {if (s[1] == '=') {uset.merge(s[0] - 'a', s[3] - 'a');}}for (auto& s : equations){if (s[1] == '!'){if (uset.find(s[0] - 'a') == uset.find(s[3] - 'a')){return false;}}}return true;}
};