Сложность: easy
Дан шаблон и строка s, необходимо определить, следует ли строка s этому шаблону.
Здесь "следует" означает полное соответствие, такое что существует биекция между буквой в шаблоне и непустым словом в строке s.
Пример:
Input: pattern = "abba", s = "dog cat cat dog"
Output: true
👨💻 Алгоритм:
1⃣Разделение строки на слова:
Разделите строку s на отдельные слова.
Если количество слов не равно длине шаблона, возвращаем false.
2⃣Создание отображений:
Создайте два словаря: один для отображения букв шаблона на слова, другой для слов на буквы шаблона.
3⃣Проверка биекции:
Пройдите по каждому символу шаблона и соответствующему слову.
Если символ уже в словаре и не соответствует текущему слову или слово уже в словаре и не соответствует текущему символу, возвращаем false.
Иначе добавляем символ и слово в словари и продолжаем проверку. Если все проверки пройдены, возвращаем true.
😎 Решение:
class Solution {
func wordPattern(_ pattern: String, _ s: String) -> Bool {
var mapChar = [Character: String]()
var mapWord = [String: Character]()
let words = s.split(separator: " ")
if words.count != pattern.count {
return false
}
for (i, word) in words.enumerated() {
let c = pattern[pattern.index(pattern.startIndex, offsetBy: i)]
let w = String(word)
if mapChar[c] == nil {
if mapWord[w] != nil {
return false
} else {
mapChar[c] = w
mapWord[w] = c
}
} else {
if mapChar[c] != w {
return false
}
}
}
return true
}
}Ставь 👍 и забирай 📚 Базу знаний