笔记介绍:
本项目是datawhale发布的LeetCode 算法笔记(Leetcode-Notes)课程完成笔记,根据推荐题目循序渐进练习算法题目。主要用python进行书写相关代码,会介绍解题思路及跑通解法。
0771. 宝石与石头
题目大意
描述:给定一个字符串 jewels
代表石头中宝石的类型,再给定一个字符串 stones
代表你拥有的石头。stones
中每个字符代表了一种你拥有的石头的类型。
要求:计算出拥有的石头中有多少是宝石。
说明:
- 字母区分大小写,因此
a
和A
是不同类型的石头。 - 1 ≤ j e w e l s . l e n g t h , s t o n e s . l e n g t h ≤ 50 1 \le jewels.length, stones.length \le 50 1≤jewels.length,stones.length≤50。
jewels
和stones
仅由英文字母组成。jewels
中的所有字符都是唯一的。
示例:
-
示例 1:
输入:jewels = "aA", stones = "aAAbbbb" 输出:3
-
示例 2:
输入:jewels = "z", stones = "ZZ" 输出:0
解题思路
我们需要统计字符串 stones
中出现在字符串 jewels
中的字符数量。为了高效地进行统计,我们可以先将 jewels
字符串转换为一个集合 jewelsSet
,这样我们可以在 O ( 1 ) O(1) O(1) 的时间复杂度内查询一个字符是否是宝石。然后遍历 stones
字符串,对于每个字符,如果它存在于 jewelsSet
中,就将计数器加一。
解题 Python 代码
def analysis(jewelsSet: list, stones: list):return sum(s in jewelsSet for s in stones)def main():# 主要逻辑代码input_jewelsSet = list(input('请输入宝石字符集,以空格分隔:').split())input_stones = list(input('请输入拥有的石头字符集,以空格分隔:').split())print('拥有的宝石数量:', analysis(input_jewelsSet, input_stones))if __name__ == "__main__":main()