Leetcode 990 等式方程的可滿足性

2021-10-06 22:52:59 字數 1659 閱讀 6734

給定乙個由表示變數之間關係的字串方程組成的陣列,每個字串方程 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]是 『=』

這道題目需要使用到並查集,簡單來描述一下並查集就是初始每個元素都是乙個集合,在遍歷的過程中如果發現兩個元素屬於乙個集合,就將這兩個集合進行合併。那麼如何判斷兩個元素屬於乙個集合呢?可以為每個元素設定乙個「根節點」,初始每個元素的根節點都是自己,之後如果發現a和b屬於乙個集合,就將b的根節點指向a,這樣通過層層的遍歷直到乙個元素的根節點指向自己,就是這個集合的根節點。

對於這道題目來說,首先將每個字母的根節點指向自己,可以用乙個int[26]陣列來儲存,因為只能是26個字母之間進行比較,用int來儲存下標,『a』記為0,得到這個int值的方法是letter-』a』,letter為任意乙個字母。首先遍歷陣列中為等式的字串,將相等的字母進行合併,即假設a==b,則讓a所在集合的根節點指向b所在集合的根節點,這樣就將a、b分別所在的集合進行了合併,即這個集合中的元素都是相等的。在遍歷完等式後再去遍歷不等式,此時若不等式兩端的字母屬於同乙個集合,那麼直接返回false,直到所有不等式也被遍歷完成,返回true。

class

solution

}for

(string str:equations)

}return

true;}

public

void

merge

(int

par,

char x,

char y)

public

intfind

(int

par,

char n)

}

執行時間

1ms100%

消耗記憶體

39.2%

16.67%

leetcode 990 等式方程 (6 8刷題)

思路 相等的關係可以傳遞,最終的結果集必然是若干個集合,每個集合裡的變數擁有相同的值,即處在同乙個連通分量裡。而不等關係則是兩個變數在不同的連通分量裡。所以,先針對相等關係建立並查集,而後判斷每個不等關係是否都滿足即可。class solution return t public void unio...

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,否則返回 ...