Сложность: easy
Мы можем представить предложение в виде массива слов, например, предложение "I am happy with leetcode" можно представить как arr = ["I", "am",happy", "with", "leetcode"].
Даны два предложения sentence1 и sentence2, каждое из которых представлено в виде массива строк, и массив пар строк similarPairs, где similarPairs[i] = [xi, yi] указывает, что два слова xi и yi похожи. Возвращается true, если предложения sentence1 и sentence2 похожи, или false, если они не похожи. Два предложения похожи, если: у них одинаковая длина (т.е, Заметьте, что слово всегда похоже само на себя, также обратите внимание, что отношение сходства не является транзитивным. Например, если слова a и b похожи, а слова b и c похожи, то a и c не обязательно похожи.
Пример:
Input: sentence1 = ["great","acting","skills"], sentence2 = ["fine","drama","talent"], similarPairs = [["great","fine"],["drama","acting"],["skills","talent"]]
Output: true
👨💻 Алгоритм:
1⃣Проверьте, равны ли длины предложений sentence1 и sentence2. Если нет, верните false.
2⃣Создайте словарь для хранения всех пар похожих слов.
3⃣Проверьте каждую пару слов из предложений sentence1 и sentence2 на схожесть, используя словарь и правило, что слово всегда похоже на само себя.
😎 Решение:
func areSentencesSimilar(_ sentence1: [String], _ sentence2: [String], _ similarPairs: [[String]]) -> Bool {
if sentence1.count != sentence2.count {
return false
}
var similar = [String: Set<String>]()
for pair in similarPairs {
let (x, y) = (pair[0], pair[1])
if similar[x] == nil {
similar[x] = Set<String>()
}
if similar[y] == nil {
similar[y] = Set<String>()
}
similar[x]!.insert(y)
similar[y]!.insert(x)
}
for (w1, w2) in zip(sentence1, sentence2) {
if w1 != w2 && (similar[w1] == nil || !similar[w1]!.contains(w2)) {
return false
}
}
return true
}Ставь 👍 и забирай 📚 Базу знаний