leetcode771 Jewels and Stones

题目如图
题目大致意思: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) 

关于为什么这么做,放下链接就跑,我觉得博主讲的已经非常细致了。

python成员运算符in的用法

auto关键字  自动推断类型  

c++11的auto特性

JAVA正则表达式匹配,替换,查找,切割

希望自己能够以后每天至少一道题。


猜你喜欢

转载自blog.csdn.net/yysave/article/details/79593431