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

2021-10-06 22:52:59 字數 1540 閱讀 2523

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

class solution:

def equationspossible(self, equations: list[str]) -> bool:

def find(x): # 隔代壓縮

if x == p[x]:

return p[x]

else:

p[x] = find(p[x])

return p[x]

p = [i for i in range(26)] # 建立並查集

for eq in equations:

if eq[1] == '=':

r1 = find(ord(eq[0]) - ord('a'))

r2 = find(ord(eq[3]) - ord('a'))

if r1 != r2:

p[r2] = r1

for eq in equations:

if eq[1] == '!':

r1 = find(ord(eq[0]) - ord('a'))

r2 = find(ord(eq[3]) - ord('a'))

if r1 == r2:

return false

return true

# 並查集(隔代壓縮)

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