916. Word Subsets
Đề Bài
You are given two string arrays words1 and words2.
A string b is a subset of string a if every letter in b occurs in a including multiplicity.
- For example,
"wrr"is a subset of"warrior"but is not a subset of"world".
A string a from words1 is universal if for every string b in words2, b is a subset of a.
Return an array of all the universal strings in words1. You may return the answer in any order.
Example 1:
Input: words1 = ["amazon","apple","facebook","google","leetcode"], words2 = ["e","o"] Output: ["facebook","google","leetcode"]
Example 2:
Input: words1 = ["amazon","apple","facebook","google","leetcode"], words2 = ["l","e"] Output: ["apple","google","leetcode"]
Constraints:
1 <= words1.length, words2.length <= 1041 <= words1[i].length, words2[i].length <= 10words1[i]andwords2[i]consist only of lowercase English letters.- All the strings of
words1are unique.
Thuật Toán & Kỹ Thuật
⏱️ Thời gian
O(n²)
💾 Không gian
O(n)
Lời Giải
C++
0916-word-subsets.cpp
#include <iostream>
#include <vector>
#include <unordered_map>
#include <algorithm>
using namespace std;
class Solution {
public:
vector<string> wordSubsets(vector<string>& words1, vector<string>& words2) {
unordered_map<char, int> words2_freq;
for (const string& word : words2) {
unordered_map<char, int> temp_freq;
for (char c : word) {
temp_freq[c]++;
words2_freq[c] = max(words2_freq[c], temp_freq[c]);
}
}
vector<string> result;
for (const string& word : words1) {
unordered_map<char, int> word_freq;
for (char c : word) {
word_freq[c]++;
}
bool is_universal = true;
for (const auto& [ch, count] : words2_freq) {
if (word_freq[ch] < count) {
is_universal = false;
break;
}
}
if (is_universal) {
result.push_back(word);
}
}
return result;
}
};