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.