1002. 查找共用字符

给你一个字符串数组 words ,请你找出所有在 words 的每个字符串中都出现的共用字符( 包括重复字符),并以数组形式返回。你可以按 任意顺序 返回答案。

示例 1:

输入:words = ["bella","label","roller"]
输出:["e","l","l"]

示例 2:

输入:words = ["cool","lock","cook"]
输出:["c","o"]

提示:

  • 1 <= words.length <= 100
  • 1 <= words[i].length <= 100
  • words[i] 由小写英文字母组成

思路:题目理解起来不难,但实现还是稍微有一点点难度。直观的想法,因为要找在 words 的每个字符串中都出现的共用字符,那就利用第一个字符串当标准,对第一个字符串中的每个字符在另外的字符串中查找是否也出现过,但第二个测试样例就有问题,o出现了,但按照上面的思路,会输出2次;因此得换个方法,每个字符都是小写字母,因此初始化一个数组list存放这26个字母的出现次数,然后遍历数组,更新list的值为每个字母出现的最小次数,然后按照次数进行输出即可。

代码(Python):

class Solution(object):
    def commonChars(self, words):
        result = []
        list = [0]*26;
        for str in words[0]:
            number = 10000                //定义一个比较大的数,方便后面取最小值
            for word in words[1:]:
                number = min(word.count(str),number);   //得到其余字符串中该字符出现的最小次数 
            list[ord(str)-ord('a')] = min(number,words[0].count(str));   //和第一个字符串比,得到该字符的最小次数
        for i in range(26):
            while(list[i]!=0):
                result.append(chr(i+ord('a')));
                list[i]-=1;
        return result;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值