题目描述
https://leetcode-cn.com/problems/satisfiability-of-equality-equations/
思路题解
["a==b","b==c","c==d","a==f","c==b"]
[a, b, c, d, e, f, g, h, i, j, k, ....]
[1, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
[1, 2, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
[1, 2, 3, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
[3, 3, 3, 5, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
[3, 5, 5, 5, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25]
例如输入"a==b",其实是将b的parent不变,将a的parent设为b的parent。
self.parent[self.find(index1)]=self.find(index2)
class Solution:
class UnionFind:
def __init__(self):
self.parent=list(range(26))
def find(self,index):
# 自己就是根节点
if index==self.parent[index]:
return index
# 查找根节点+路径压缩
self.parent[index]=self.find(self.parent[index])
return self.parent[index]
def union(self,index1,index2):
self.parent[self.find(index1)]=self.find(index2)
def equationsPossible(self, equations: List[str]) -> bool:
uf=Solution.UnionFind()
for st in equations:
if st[1]=="=":
index1=ord(st[0])-ord("a")
index2=ord(st[3])-ord("a")
uf.union(index1,index2)
# print(uf.parent)
for st in equations:
if st[1]=="!":
index1=ord(st[0])-ord("a")
index2=ord(st[3])-ord("a")
if uf.find(index1)==uf.find(index2):
return False
return True
并查集问题整理:
https://blog.csdn.net/anan15151529/article/details/118416802