990 等式方程的可滿足性 medium

2022-06-13 06:12:09 字數 1743 閱讀 2131

給定乙個由表示變數之間關係的字串方程組成的陣列,每個字串方程 equations[i] 的長度為 4,並採用兩種不同的形式之一:"a==b" 或 "a!=b"。在這裡,a 和 b 是小寫字母(不一定不同),表示單字母變數名。

只有當可以將整數分配給變數名,以便滿足所有給定的方程時才返回 true,否則返回 false。 

示例 1:

輸入:["a==b","b!=a"]

輸出:false

解釋:如果我們指定,a = 1 且 b = 1,那麼可以滿足第乙個方程,但無法滿足第二個方程。沒有辦法分配變數同時滿足這兩個方程。

示例 2:

輸入:["b==a","a==b"]

輸出:true

解釋:我們可以指定 a = 1 且 b = 1 以滿足滿足這兩個方程。

示例 3:

輸入:["a==b","b==c","a==c"]

輸出:true

示例 4:

輸入:["a==b","b!=c","c==a"]

輸出:false

示例 5:

輸入:["c==c","b==d","x!=z"]

輸出:true

1 <= equations.length <= 500

equations[i].length == 4

equations[i][0] 和 equations[i][3] 是小寫字母

equations[i][1] 要麼是 '=',要麼是 '!'

equations[i][2] 是 '='

思路:•並查集

• 利用樹的結構,初始化時,每乙個節點都是獨立的,其自身指向自身,因為這裡都是小寫字元,則運用長度為 26 的陣列,陣列中的下標,表示節點,而陣列中的值,表示下標 n 的父節點 parent[n],當 n == parent[n] 時,表明節點 n 的父節點也是 n,說明其就是根節點

• 對於等式的處理,將等式兩邊的字元,連通在一起,連通的時候要注意,要找到兩邊的根節點,將根節點連通在一起

• 要找到乙個節點 n1的根節點,將其根節點掛載到另乙個節點 n2 的根節點中,不能將自身 n1 直接掛載到 n2 的根節點中;

• 比如: a == b 此時又有 a == c (我用的是固定將第乙個節點掛載到第二個節點中)則要將 a 的根節點 b ,掛載到 c 中,而不是直接將 a 掛載到 c 中,否則,判斷 b==c 時出錯,第一次提交時犯了這個錯誤!

• 對於不等式的處理,如果發現不等式兩邊,是連通的,也就是說,有共同的根節點,則不滿足不等式的定義,返回 false.

• 如果所有的不等式都滿足,則返回 true.

class

solution

for(string s : equations)

}for(string s : equations)

}return

true; //

對於不等式,都滿足條件,則返回 true

}

public

void union(int parent, int n1, int n2)

public

int findroot(int parent, int n)

return

n; }

}

990 等式方程的可滿足性 leetcode

給定乙個由表示變數之間關係的字串方程組成的陣列,每個字串方程 equations i 的長度為 4,並採用兩種不同的形式之一 a b 或 a b 在這裡,a 和 b 是小寫字母 不一定不同 表示單字母變數名。只有當可以將整數分配給變數名,以便滿足所有給定的方程時才返回 true,否則返回 false...

LeetCode 990 等式方程的可滿足性 中等

給定乙個由表示變數之間關係的字串方程組成的陣列,每個字串方程 equations i 的長度為 4,並採用兩種不同的形式之一 a b 或 a b 在這裡,a 和 b 是小寫字母 不一定不同 表示單字母變數名。只有當可以將整數分配給變數名,以便滿足所有給定的方程時才返回 true,否則返回 false...

Leetcode 990 等式方程的可滿足性

給定乙個由表示變數之間關係的字串方程組成的陣列,每個字串方程 equations i 的長度為 4,並採用兩種不同的形式之一 a b 或 a b 在這裡,a 和 b 是小寫字母 不一定不同 表示單字母變數名。只有當可以將整數分配給變數名,以便滿足所有給定的方程時才返回 true,否則返回 false...