特点:== 具有传递性,所以用并查集的思想做。
具体做法:先把所有的==的字符用并查集合并,然后判断所有的!=,然后在一个集合中,则返回false。
class Solution {
public:
unordered_map<char, char> ump;
char find(char ch) {
if (ump[ch] == ch) return ump[ch];
return ump[ch] = find(ump[ch]);
}
void myunion(char u, char v) {
char fu = find(u);
char fv = find(v);
if (fu != fv) ump[fu] = fv;
}
bool equationsPossible(vector<string>& equations) {
for (char i = 'a'; i <= 'z'; ++i) {
ump[i] = i;
}
for (auto& each : equations) {
if (each[1] == '=') {
myunion(each[0], each[3]);
}
}
for (auto& each : equations) {
if (each[1] != '=') {
if (!ump.count(each[0]) || !ump.count(each[3])) return false;
char fu = find(each[0]);
char fv = find(each[3]);
if (fu == fv) return false;
}
}
return true;
}
};