# 734. Sentence Similarity

### Approach 1: Memoised pairs

```python
from collections import defaultdict
class Solution:
    def areSentencesSimilar(self, words1: List[str], words2: List[str], pairs: List[List[str]]) -> bool:
        if len(words1) != len(words2):
            return False
        di = defaultdict(set)
        i = 0
        for word1, word2 in pairs:
            di[word1].add(i)
            di[word2].add(i)
            i += 1
        # print(di)
        for i in range(len(words1)):
            word1 = words1[i]
            word2 = words2[i]
            if len(di[word1] & di[word2]) == 0 and word1 != word2:
                return False
        return True
```

The first level solution is to create a memoised dictionary that keeps track of the words and their neighbours in a set. Then we can just iterate through the original arrays, to see if they have some common words b/w their sets, and if they don't we can `return False`

> **Time Complexity:** *O(max(len(pairs), len(words1)))*
>
> **Space Complexity:** *O(len(pairs)\*len(words))* (Since we do not need to store all the synonyms)
