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"]
解题思路:
1.将B字符数组构造一个字典,使得字典中的每个字符在单个字符串中的频次最大
例如B=[‘eco’,‘oo’,‘ec’],构造字典为:dic={‘e’:1,‘c’:1,‘o’:2}
2.遍历字符串数组A,满足dic字典的每一个字符存在于A[i]且字符数目小于等于A[i]对应字符的统计数目。
python:
class Solution:
def wordSubsets(self, A,B):
#print(dicB,dicA)
dicB={}
res=[]
for unit in B:
temp={}
for x in unit:
if x in temp:
print(temp)
temp[x]+=1
else:
temp[x]=1
for k, v in temp.items():
dicB[k] = max(dicB[k], v) if k in dicB else v
print(dicB)
fg=False
for unit in A:
for (a,b) in dicB.items():
if dicB[a]<=unit.count(a):
print(unit,a)
fg=True
else:
fg=False
break
if fg==True:
res.append(unit)
return res