916. Word Subsets(python)

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
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值