题目如图
题目大致意思:j是珠宝,s是自己拥有的石头,判断自己拥有的石头中有多少个珠宝。
像题目中的example1,珠宝是a和A(区分大小写)石头是七个字符的石头,是珠宝的是一个a和两个A,所以输出是3。那么example2,珠宝是z,石头ZZ不含珠宝,所以输出为0。
理解了题目的意思之后分析,就是数一数S中出现了多少个j。
c++做法(leetcode刷题编程中已经内置了STL,不用加头文件)
将J中所有字符在hash数组中标记为1,再遍历S,统计hash==1的个数。
class Solution {
public:
int numJewelsInStones(string J, string S) {
int ans = 0, hash[256] = {0};
for (auto i : J) hash[i] = 1;
for (auto i : S) if (hash[i]) ans++;
return ans;
}
};
java(Author By StefanPochmann)感觉很厉害,短短一行
class Solution {
public int numJewelsInStones(String J, String S) {
//利用正则表达式,把S中非J内容去除,replaceAlll()方法,再返回长度
return S.replaceAll("[^"+J+"]","").length();
}
}
此处的[^J]表示的意思为负值字符集合,也就是匹配未包含的任意字符。
python方法
class solution:
def numofJewels(self,J,S):
return sum(s in J for s in S)
关于为什么这么做,放下链接就跑,我觉得博主讲的已经非常细致了。
auto关键字 自动推断类型
希望自己能够以后每天至少一道题。