查找常用字符
链接:https://leetcode-cn.com/problems/find-common-characters/
1. 题目描述
给定仅有小写字母组成的字符串数组 A,返回列表中的每个字符串中都显示的全部字符(包括重复字符)组成的列表。例如,如果一个字符在每个字符串中出现 3 次,但不是 4 次,则需要在最终答案中包含该字符 3 次。
你可以按任意顺序返回答案。
示例 1:
输入:["bella","label","roller"]
输出:["e","l","l"]
示例 2:
输入:["cool","lock","cook"]
输出:["c","o"]
2. 思路
使用哈希表(散列表),小写字母一共是26个,可以用下标 0-25 表示, 下标对应的值为 该字符出现的次数。python语言实现如下:
# -*- coding: utf-8 -*-
"""
Created on Tue Sep 21 20:17:41 2021
@author: JackYang
"""
class Solution:
def commonChars(self, words):
# 1. minfreq 存储 某个字符 在所有字符串中出现次数的最小值。
minfreq = [float("inf")] * 26
# 2. words 存放多个字符串, word 是每1个字符串, ch 是 word 中的每一个字符
for word in words:
# 3. freq : 存储 每个字符 在每一个字符串 word 中出现的次数。
freq = [0] * 26 # 记录每一个字符出现的次数
# 把 words 中 每个字符串 每个单词出现次数存放到 freq 中。
for ch in word:
freq[ord(ch) - ord("a")] += 1
for i in range(26):
minfreq[i] = min(minfreq[i], freq[i])
print(minfreq)
ans = list()
for i in range(26):
ans.extend([chr(i + ord("a"))] * minfreq[i])
return ans
ans = Solution().commonChars(["bella", "label", "roller"])
print('The result is :', ans)
print(ord('b') - ord('a'))
# =============================================================================
# ctro + 1 : 注释; ctro + 4/5注释和反注释
# =============================================================================
# 1.ord() 函数 和 chr()函数
print(ord('A')) # ord() : 字符 --> ASCII 码
print(chr(65)) # chr() : ASCII码 --> 字符
# 设计哈希表(也叫散列表),记录26个英文字母出现的次数。
freq = [0] * 26 # 定义列表,里面有26个元素,且都为0.
print(freq)
# 给一个字符串,然后把每个字符出现的次数放到 哈希表中。
# 列表的下标: 0-25 表示的是
print(float("inf")) # 注意 float('inf') : 表示的是正无穷。
# 2.extent() 函数 : 把列表中的每个元素添加到另一个列表中。
# append() : 把某个 list 变量 添加到 另外一个列表中。
ans = list()
mystr = ['apple', 'banana']
ans.extend('a' * 3)
print(ans)
ans.append(mystr)
ans.extend(mystr)
print(ans)