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 本文解题方法

猜你喜欢

转载自blog.csdn.net/weixin_42785446/article/details/88976601