Dialogue Similarity - codepath/compsci_guides GitHub Wiki
U-nderstand
Understand what the interviewer is asking for by using test cases and questions about the problem.
- Q
- What is the desired outcome?
- To determine if two sentences are similar based on given pairs of similar words.
- What input is provided?
- Two string arrays
sentence1
andsentence2
, and an array of string pairssimilar_pairs
.
- Two string arrays
- What is the desired outcome?
P-lan
Plan the solution with appropriate visualizations and pseudocode.
General Idea: Build a similarity map from similar_pairs
and compare corresponding words in sentence1
and sentence2
.
1) Check if `sentence1` and `sentence2` have the same length. If not, return `False`.
2) Build a similarity map using a dictionary of sets.
3) Compare corresponding words in `sentence1` and `sentence2`.
- If the words are equal, continue.
- If the words are different, check if they are in the similarity map.
- If they are not similar, return `False`.
4) If all words are similar, return `True`.
⚠️ Common Mistakes
- Not handling the case where
sentence1
andsentence2
are of different lengths.
I-mplement
def is_similar(sentence1, sentence2, similar_pairs):
# Step 1: Check if both sentences have the same length
if len(sentence1) != len(sentence2):
return False
# Step 2: Build the similarity map
similarity_map = {}
for pair in similar_pairs:
if pair[0] not in similarity_map:
similarity_map[pair[0]] = set()
if pair[1] not in similarity_map:
similarity_map[pair[1]] = set()
similarity_map[pair[0]].add(pair[1])
similarity_map[pair[1]].add(pair[0])
# Step 3: Compare corresponding words
for word1, word2 in zip(sentence1, sentence2):
if word1 == word2:
continue
if word1 in similarity_map and word2 in similarity_map[word1]:
continue
if word2 in similarity_map and word1 in similarity_map[word2]:
continue
return False
return True