[
hash table
string
dfs
union find
graph algo
]
Leetcode 0737 Sentence Similarity II
Problem statement
https://leetcode.com/problems/sentence-similarity-ii/
Solution
Natural extension of problem 0734, here we need to create graph of connections. Then we just can perform dfs for each pair in pairs and have O(P * N) time complexity, where P is size of pairs and N is size of words1 and words2.
We can also perform dfs only once and find connected components in graph in O(N) time and then for each pair check similarity in O(1).
Complexity
Overall complexity is O(N+P). Space complexity is O(N).
Code
class Solution:
def areSentencesSimilarTwo(self, words1, words2, pairs):
G, V, comps, idx = defaultdict(list), set(), {}, 0
for x, y in pairs:
G[x].append(y)
G[y].append(x)
def dfs(node, idx):
V.add(node)
comps[node] = idx
for child in G[node]:
if child not in V:
dfs(child, idx)
for node in G.keys():
if node not in V:
dfs(node, idx)
idx += 1
if len(words1) != len(words2): return False
for x, y in zip(words1, words2):
if x != y and comps.get(x, -1) != comps.get(y, -2): return False
return True
Remark
Finally, there is Union Find approach, where we again found connected components with the same complexity.