넘치게 채우기
[LeetCode] 916. Word Subsets 본문
https://leetcode.com/problems/word-subsets/description/
leetcode - Word Substts
문제 유형: 문자열 처리, 집합
문제 난이도: Medium
문제
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.
두 개의 문자열 배열 words1과 words2를 받는다.
개수까지 고려해서 문자열 b의 모든 글자가 a에 포함될 때 부분집합이라 한다.
words1의 문자열이 words2의 모든 문자열을 부분집합으로 가진다면, a는 범용적인 문자열이다.
words1에서의 범용적인 문자열들을 찾아 반환하시오. 순서는 상관 없습니다.
풀이
우선, words2의 단어들에 대한 모든 글자 빈도에 대한 합집합을 만든다.
그 뒤, words1의 단어들을 읽으면서 모든 글자빈도 합집합을 포함하는지 확인해주면 된다.
코드
C++
class Solution {
public:
vector<string> wordSubsets(vector<string>& words1, vector<string>& words2) {
vector<int> freq(26, 0);
for(const auto &word : words2) {
vector<int> temp(26, 0);
for(const auto &ch : word) {
temp[ch - 'a']++;
}
for(int i = 0; i < 26; ++i) {
freq[i] = max(freq[i], temp[i]);
}
}
vector<string> ans;
for(const auto &word : words1) {
vector<int> temp(26, 0);
bool flag = true;
for(const auto &ch : word) {
temp[ch-'a']++;
}
for(int i = 0; i < 26; ++i) {
if(temp[i] - freq[i] < 0) {
flag = false;
break;
}
}
if(flag) ans.push_back(word);
}
return ans;
}
};
'PS > LeetCode' 카테고리의 다른 글
[LeetCode] 2185. Counting Words With a Given Prefix (0) | 2025.01.09 |
---|---|
[LeetCode] 3042. Count Prefix and Suffix Pairs I (0) | 2025.01.08 |
[LeetCode] 1408. String Matching in an Array (0) | 2025.01.07 |
[LeetCode] 1769. Minimum Number of Operations to Move All Balls to Each Box (0) | 2025.01.06 |
[LeetCode] 2381. Shifting Letters II (0) | 2025.01.05 |