LeetCode:916. Word Subsets - Python
问题描述:
916. 单词子集
我们给出两个单词数组A
和 B
。每个单词都是一串小写字母。
现在,如果b
中的每个字母都出现在a
中,包括重复出现的字母,那么称单词b
是单词a
的子集。 例如,“wrr”
是 “warrior”
的子集,但不是 “world”
的子集。
如果对B
中的每一个单词b
,b
都是a
的子集,那么我们称A
中的单词a
是通用的。
你可以按任意顺序以列表形式返回A
中所有的通用单词。
示例 :
输入:A = [“amazon”,“apple”,“facebook”,“google”,“leetcode”], B = [“lo”,“eo”]
输出:[“google”,“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]
。
问题分析:
先来理解题目,题目强调的是单个字母,不存在字母顺序问题,所以只要统计出B
中每个小写字母,在所有的单词中出现次数最高的那个数(例如,B = ["loo","eo"]
,那么o
最大的出现次数为2
, 因为在"loo"
出现了两次,在"eo"
出现了一次,所以以最大的为准),然后再统计A
中的每个单词中的每个字母出现的次数,与其对比即可。
具体思路:
(1)先统计出数组B
中每个小写字母的最大出现次数,因为是题目只包含26个小写字母,所以,可以直接转换成数组来保存。(这这个过程中,可以用字典或者hash
来保存,这样可能会更快一些)
(2)然后,依次统计A
中的没单词中每个字母的出现个数,与(1)统计的结果做对比,选择出通用单词即可。
Python3实现:
class Solution:def wordSubsets(self, A, B):def count(word): # 统计单词中每个字母出现的次数cnt = [0] * 26for letter in word:cnt[ord(letter) - ord('a')] += 1return cntbmax = [0] * 26for b in B:for i, c in enumerate(count(b)):bmax[i] = max(bmax[i], c) # 选择出现次数最多那个作为后面比较的标准res = []for a in A: # 判断 A 中的每个单词,并依次添加到结果if all(x >= y for x, y in zip(count(a), bmax)):res.append(a)return resif __name__ == '__main__':A, B = ["amazon", "apple", "facebook", "google", "leetcode"], ["e", "o"]solu = Solution()print(solu.wordSubsets(A, B))
声明: 总结学习,有问题可以批评指正,大神可以略过哦。
题目链接、参考链接
LeetCode:916. Word Subsets - Python相关推荐
- Python办公自动化(一):从Word到Excel
有这样一份Word(由于涉及文件私密所以文中的具体内容已做修改) 一共有近2600条类似格式的表格细栏,每个栏目包括的信息有: 日期 发文单位 文号 标题 签收栏 需要提取其中加粗的这三项内容到Exc ...
- LeetCode:322. 零钱兑换(python)
LeetCode:322. 零钱兑换(python) 给定不同面额的硬币 coins 和一个总金额 amount.编写一个函数来计算可以凑成总金额所需的最少的硬币个数.如果没有任何一种硬币组合能组成总 ...
- LeetCode:309. 最佳买卖股票时机含冷冻期(python)
LeetCode:309. 最佳买卖股票时机含冷冻期(python) 给定一个整数数组,其中第 i 个元素代表了第 i 天的股票价格 . 设计一个算法计算出最大利润.在满足以下约束条件下,你可以尽可能 ...
- Python-docx:读写word文档的Python库
Python-docx:读写word文档的Python库 1 Python DocX目前是Python OpenXML的一部分,你可以用它打开Word 2007及以后的文档,而用它保存的文档可以在Mi ...
- 力扣Leetcode:5. 最长回文子串(Python)
题目描述 给你一个字符串 s,找到 s 中最长的回文子串. 题解:动态规划 这是一道很经典的题目.首先我想到了动态规划算法: 对于子串s[i-j],它为回文子串的条件为:s[i+1 - j-1]为回文 ...
- LeetCode 75. Sort Colors (python一次遍历,模拟三路快排)
LeetCode 75. Sort Colors (python一次遍历,模拟三路快排) 题目分析: 本题需要实现数字只包含0,1,2的排序,并且要求一次遍历. 由于只用把数字隔离开,很容易想到快排的 ...
- 93%程序员都做过的事:来写一个python式的hello world吧
学习编程语言的第一步,让你的程序对这个世界说一声 hello world! 这个程序是编程界经典中的经典,让无数编程恐惧症患者得以顺利写出第一个程序,从而走上大神的不归路! 1. 新建文本文档 先让我 ...
- LeetCode 字符串简单部分 算法 python实现
''' #2018-06-02 June Saturday the 22 week, the 153 day SZ LeetCode 字符串简单部分 算法 python实现 https://leetc ...
- Python3-word文档操作(八):提取word文档中的图片方式一-利用docx库
1. 简介: 要获取word文档中的图片文件.思路就是先解压,再查找.python中,下面两个库都可以实现这个功能: (1)zip库 (2)docx库 zip库: 上一篇博文已经提过,word本质上也 ...
最新文章
- Cache_总体介绍
- 深入浅出jQuery (五) 如何自定义UI-Dialog?
- 一个css文件里实际并不存在的class,不能给element layout产生任何影响
- CentOS - 修改主机名教程(将 localhost.localdomain 改成其它名字)
- Java内存配太大导致fullgc_记一次因为短命大对象导致fullGC的问题
- ubuntu1404_server搭建lamp
- 【Java数据结构与算法】第四章 栈实现综合计算器
- 10年前腾讯微信后台第一天提交的代码曝光;苹果App Store佣金抽成再做让步;TypeScript 4.1发布|极客头条...
- VS2013代码调试:[7]如何避免调试时加载符号
- 2.熟悉LINUX的基本操作
- 全国车辆限行查询api 全国限行限号数据服务
- QT所有版本和VS插件下载
- jQuery- 跟着李南江学编程
- 计算机开机后屏幕和键盘不亮,电脑开机显示器不亮键盘也不亮怎么回事
- 阿里云CDN是什么?阿里云CDN配置与购买优惠教程
- 【云扩RPA】Excel-ReadingAndWriting
- 微信小程序父子组件方法调用方法汇总
- Unity解析和读取文本—— txt 文件
- LaTeX中定义新命令和环境
- 放榜!腾讯iOA、腾讯天幕入选国内数字化可信服务首批认证产品