python leetcode刷题 (1):771.宝石与石头

题目描述:

给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a"和"A"是不同类型的石头。
示例 1:
输入: J = “aA”, S = “aAAbbbb”
输出: 3
示例 2:
输入: J = “z”, S = “ZZ”
输出: 0
注意:

S 和 J 最多含有50个字母。
J 中的字符不重复。

解题过程:

我第一反应是使用for循环遍历,但由于对遍历字符串不了解,所以没有解出此题,然后我搜了一下答案:

class Solution:
    def numJewelsInStones(self, J: str, S: str) -> int:
        n=0
        for i in J:
            n+=S.count(i)
            
        return n

执行用时:76ms
执行结果为3,与原题目答案一致~
补充:后来又翻题目评论区,发现了神仙方法

class Solution:
    def numJewelsInStones(self, J: str, S: str) -> int:
       return sum(1 for s in S if s in set(J))

此处使用列表表达式,格式为:
[ 表达式 for 变量 in 列表 if 条件]

总结:

  1. for循环不仅可以遍历列表,而且可以遍历字符串,此处由于J中字母不重复,故遍历字符串J
  2. count() 方法用于统计字符串里某个字符出现的次数
  3. 列表表达式是一种方便简洁的语法形式,我们可以利用它将一个列表经过滤后转换成另一个列表,也可以利用它将函数应用于列表中的元素

参考文献:

http://www.runoob.com/python/att-string-count.html count使用方法
https://blog.csdn.net/TravisT/article/details/79834181 本文解题方法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值