查找常用字符

查找常用字符

链接: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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值