We are given two arrays A and B of words. Each word is a string of lowercase letters.
Now, say that word b is a subset of word 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".
Now say a word a from A is universal if for every b in B, b is a subset of a.
Return a list of all universal words in A. You can return the words in any order.
Example 1:
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","o"] Output: ["facebook","google","leetcode"]
Example 2:
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["l","e"] Output: ["apple","google","leetcode"]
Example 3:
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["e","oo"] Output: ["facebook","google"]
Example 4:
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["lo","eo"] Output: ["google","leetcode"]
Example 5:
Input: A = ["amazon","apple","facebook","google","leetcode"], B = ["ec","oc","ceo"] Output: ["facebook","leetcode"]
Note:
1 <= A.length, B.length <= 100001 <= A[i].length, B[i].length <= 10A[i]andB[i]consist only of lowercase letters.- All words in
A[i]are unique: there isn'ti != jwithA[i] == A[j].
Accepted
15,865
Submissions
34,051
--------------------------------------------------------------------------------
TLE code without merging required characters:
from collections import Counter
class Solution:
def a_contains_b(self, a, b):
for k,v in b.items():
if (k not in a or (k in a and a[k] < v)):
return False
return True
def contains_all(self, a, b_list):
for b in b_list:
is_contain = self.a_contains_b(a,b)
if (is_contain == False):
return False
return True
def wordSubsets(self, A, B):
b_list = []
for b in B:
b_list.append(Counter(b))
res = []
for a in A:
c_a = Counter(a)
if (self.contains_all(c_a, b_list)):
res.append(a)
return res
s = Solution()
print(s.wordSubsets(["amazon","apple","facebook","google","leetcode"],["l","e"]))
Merge required characters:
from collections import Counter
class Solution:
def a_contains_b(self, a, b):
for k,v in b.items():
if (k not in a or (k in a and a[k] < v)):
return False
return True
def wordSubsets(self, A, B):
required_letter = Counter()
for b in B:
b_c = Counter(b)
for k,v in b_c.items():
if (k not in required_letter or (k in required_letter and required_letter[k] < v)):
required_letter[k] = v
res = []
for a in A:
c_a = Counter(a)
if (self.a_contains_b(c_a, required_letter)):
res.append(a)
return res
s = Solution()
print(s.wordSubsets(["amazon","apple","facebook","google","leetcode"],["e","o"]))

本文介绍了一种算法,用于从两个字符串数组中找出所有包含B数组中每个元素子集的A数组中的单词。通过实例展示了如何使用Counter类来比较字符频率,确保A数组中的单词能覆盖B数组中所有单词的字符需求。
1538

被折叠的 条评论
为什么被折叠?



