題目
我們給出兩個單詞陣列 A 和 B。每個單詞都是一串小寫字母。
現在,如果 b 中的每個字母都出現在 a 中,包括重複出現的字母,那麼稱單詞 b 是單詞 a 的子集。
例如,“wrr” 是 “warrior” 的子集,但不是 “world” 的子集。
如果對 B 中的每一個單詞 b,b 都是 a 的子集,那麼我們稱 A 中的單詞 a 是通用的。
你可以按任意順序以列表形式返回 A 中所有的通用單詞。
示例 1: 輸入:A = ["amazon","apple","facebook","google","leetcode"], B = ["e","o"]
輸出:["facebook","google","leetcode"]
示例 2:輸入:A = ["amazon","apple","facebook","google","leetcode"], B = ["l","e"]
輸出:["apple","google","leetcode"]
示例 3:輸入:A = ["amazon","apple","facebook","google","leetcode"], B = ["e","oo"]
輸出:["facebook","google"]
示例 4:輸入:A = ["amazon","apple","facebook","google","leetcode"], B = ["lo","eo"]
輸出:["google","leetcode"]
示例 5:輸入:A = ["amazon","apple","facebook","google","leetcode"], B = ["ec","oc","ceo"]
輸出:["facebook","leetcode"]
提示:1 <= A.length, B.length <= 10000
1 <= A[i].length, B[i].length <= 10
A[i] 和 B[i] 只由小寫字母組成。
A[i] 中所有的單詞都是獨一無二的,也就是說不存在 i != j 使得 A[i] == A[j]。
解題思路分析1、遍歷;時間複雜度O(n),空間複雜度O(n)
func wordSubsets(A []string, B []string) []string { maxArr := make([]int, 26) // B中的字母的最大頻次 for i := 0; i < len(B); i++ { temp := count(B[i]) for i := 0; i < 26; i++ { maxArr[i] = max(maxArr[i], temp[i]) } } res := make([]string, 0) for i := 0; i < len(A); i++ { temp := count(A[i]) flag := true for i := 0; i < 26; i++ { if temp[i] < maxArr[i] { flag = false break } } if flag == true { res = append(res, A[i]) } } return res}func count(str string) [26]int { arr := [26]int{} for i := 0; i < len(str); i++ { arr[str[i]-'a']++ } return arr}func max(a, b int) int { if a > b { return a } return b}
總結Medium題目,統計B中的字母出現的最大頻次,然後遍歷判斷即可