当前位置: 首页 > 后端技术 > Python

一道算法题,引出集合的特殊用法

时间:2023-03-25 21:36:52 Python

题目描述:题目编号:1002.查找常用字符给定一个仅由小写字母组成的字符串数组A,返回列表A列表中每个字符串显示的字符串所有字符(包括重复字符)。例如,如果一个字符在每个字符串中出现3次,但不是4次,则您需要在最终答案中包含该字符3次。您可以按任何顺序返回答案。示例1:输入:["bella","label","roller"]输出:["e","l","l"]示例2:输入:["cool","lock","cook"]输出:["c","o"]提示:1<=A.length<=1001<=A[i].length<=100A[i][j]为小写字母或以上内容来源:力拓(LeetCode)链接:https://leetcode-cn.com/probl...题目答案:fromcollectionsimportCounterclass解决方法:defcommonChars(self,A:List[str])->List[str]:res=NoneforainA:c=Counter(a)ifresisNone:res=celse:res&=creturnlist(res.elements())题解看一行流,拜boilclass解法:defcommonChars(self,A:List[str])->List[str]:returnlist(reduce(lambdax,y:x&y,map(collections.Counter,A)).elements())以上来源内容:LeetCode)链接:https://leetcode-cn.com/probl...作者:zyyyyy问题:解法中的res&=c是什么鬼?为什么在解题思路上可以达到最小计数的效果呢?看了题解下的回答,有人说&是Counter中的一个特殊用法,用来获取交接的结果,但是这个解释不是很清楚,也没能打消我的疑惑,于是进一步研究.找了一个文档:Pythoncountercollections.Counterusagedetails最后介绍了Counter的&的用法。答案:res&=c,展开:res=res&cCounter特有的算术运算,当使用&时,取两个Counter对象中交集元素的最小计数的结果。示例:Counter('AAB')&Counter('BBCC')的输出为:{'B':1}过程:第1步:获取元素计数:{'A':2,"B":1}与{'B':2,'C':2}第二步:取交集:{"B":1}&{'B':2}第三步:取结果:取小计数的结果:{'B':1}