LeetCode:771. Jewels and Stones
You're given strings J representing the types of stones that are jewels, and S representing the stones you have. Each character in S is a type of stone you have. You want to know how many of the stones you have are also jewels.
The letters in J are guaranteed distinct, and all characters in J and S are letters. Letters are case sensitive, so "a" is considered a different type of stone from "A".
Example 1:
Input: J = "aA", S = "aAAbbbb"
Output: 3
Example 2:
Input: J = "z", S = "ZZ"
Output: 0
其实就是统计J中的字符在S中的出现的次数。
思路一:暴力求解
双重循环,不再赘述。Python 代码实现
或者内部循环里直接使用 in 关键词:
class Solution:
def numJewelsInStones(self, J: str, S: str) -> int:
lS = len(S)
countJ = 0
for i in range(lS):
if (S[i] in J):
countJ+=1
return countJ
思路二:使用ASCII码的哈希方法
小写字符 a 的ASCII码为97,大小写字母一共58个。所以要用到一个长度为58的整型数组,如果J字符串中还有某个字符,则对应的位置设为1。然后遍历一次字符串S,如果某个位置的字符对应的哈希值为1,则表明存在于J中,个数加1。
class Solution:
def numJewelsInStones(self, J: str, S: str) -> int:
lJ = len(J)
lS = len(S)
charMap = [0]*58
for i in range(lJ):
charMap[ord(J[i])-97]=1
countJ = 0
for i in range(lS):
if (charMap[ord(S[i])-97] == 1):
countJ+=1
return countJ
THE END.
本文介绍了解决LeetCode上编号为771的问题“宝石与石头”的两种方法。首先,通过暴力求解的方式,使用双重循环或in关键词进行计数;其次,提出了一种更高效的哈希方法,利用ASCII码特性创建哈希表加速查找过程。
373

被折叠的 条评论
为什么被折叠?



