Сложность: medium
Вам даны два массива строк words1 и words2. Строка b является подмножеством строки a, если каждая буква в b встречается в ней, включая кратность. Например, "wrr" является подмножеством "warrior", но не является подмножеством "world". Строка a из words1 является универсальной, если для каждой строки b в words2, b является подмножеством a. Верните массив всех универсальных строк в words1. Вы можете вернуть ответ в любом порядке.
Пример:
Input: words1 = ["amazon","apple","facebook","google","leetcode"], words2 = ["e","o"]
Output: ["facebook","google","leetcode"]
👨💻 Алгоритм:
1⃣Подсчитать максимальное количество каждой буквы в каждом слове из words2.
2⃣Проверить каждое слово из words1, если оно содержит не менее максимального количества каждой буквы, которая встречается в словах из words2.
3⃣Вернуть массив слов из words1, которые удовлетворяют этому условию.
😎 Решение:
class Solution {
func wordSubsets(_ words1: [String], _ words2: [String]) -> [String] {
var maxCount = [Character: Int]()
for word in words2 {
var count = [Character: Int]()
for char in word {
count[char, default: 0] += 1
}
for (char, cnt) in count {
maxCount[char] = max(maxCount[char, default: 0], cnt)
}
}
var result = [String]()
for word in words1 {
var count = [Character: Int]()
for char in word {
count[char, default: 0] += 1
}
if maxCount.allSatisfy({ count[$0.key, default: 0] >= $0.value }) {
result.append(word)
}
}
return result
}
}Ставь 👍 и забирай 📚 Базу знаний