给你一个字符串数组 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):
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;