題目

給予兩個字串的陣列,words1、words2
判斷words2內的單詞,是否為words1的Subsets
要符合所有words2內的所有組合,才算是words1的Subsets

解題方法

先將words2單字內出現的字母數量記錄下來
而為什麼要取Max的原因在於,如果符合最大的出現數目,代表其數目以下也會符合為單字的子集合
根據這樣的想法,再去判斷就可以輕鬆解決題目

程式碼

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
class Solution {
public:
vector<string> wordSubsets(vector<string>& words1, vector<string>& words2) {
vector<string> ans;
vector<int> Charcount(26);
for(int i=0;i<words2.size();++i)
{
vector<int> t = counter(words2[i]);
for(int j=0;j<26;++j)
Charcount[j] = max(Charcount[j],t[j]);
}

for(int i=0;i<words1.size();++i)
{
vector<int> t = counter(words1[i]);
for(int j=0;j<26;++j)
{
if(t[j] < Charcount[j])
break;
else if(j == 25)
ans.push_back(words1[i]);
}
}

return ans;
}
vector<int> counter(string &tmp)
{
vector<int> res(26);
for(char c:tmp)
++res[c - 'a'];
return res;
}
};