LC 990. Satisfiability of Equality Equations
Given an array?equations?of strings that represent relationships between variables,each string? Return? ? Example 1: Input: ["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: ["b==a","a==b"]
Output: true Explanation: We could assign a = 1 and b = 1 to satisfy both equations.
Example 3: Input: ["a==b","b==c","a==c"]
Output: true
Example 4: Input: ["a==b","b!=c","c==a"]
Output: false
Example 5: Input: ["c==c","b==d","x!=z"]
Output: true
? Note:
?
Runtime:?
12 ms,faster than?100.00%?of?C++?online submissions for?Satisfiability of Equality Equations.
Memory Usage:?
7.1 MB,less than?100.00%?of?C++?online submissions for?Satisfiability of Equality Equations.
class Solution { private: int arr[26]; public: void unionab(int a,int b) { arr[parent(a)] = arr[parent(b)]; } int parent(int a) { if(arr[a] != a) return parent(arr[a]); return a; } bool uninit(int a) { return arr[a] == a ? true : false; } bool hassameroot(int a,int b) { return parent(a) == parent(b); } bool equationsPossible(vector<string>& equations) { for(int i=0; i<26; i++) arr[i] = i; for(int i=0; i<equations.size(); i++) { int a = ((int)equations[i][0] - (int)‘a‘); int b = ((int)equations[i][3] - (int)‘a‘); if ((int)equations[i][1] == (int)‘=‘) { if(!hassameroot(a,b)) unionab(a,b); } } for(int i=0; i<equations.size(); i++) { int a = ((int)equations[i][0] - (int)‘a‘); int b = ((int)equations[i][3] - (int)‘a‘); if((int)equations[i][1] == (int)‘!‘) { if(hassameroot(a,b)) return false; } } return true; } }; (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |