首頁>技術>

題目

我們給出兩個單詞陣列 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中的字母出現的最大頻次,然後遍歷判斷即可

6
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 每次10分鐘跟我學Python(第三十九次課)