LeetCode 771. 宝石与石头

 给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a""A"是不同类型的石头。

示例 1:

输入: J = "aA", S = "aAAbbbb"
输出: 3

示例 2:

输入: J = "z", S = "ZZ"
输出: 0

注意:

  • S 和 J 最多含有50个字母。
  •  J 中的字符不重复。


第一种方法最容易想到,也最简单的直接利用两个for循环,一个一个找:

    public static int numJewelsInStones(String J, String S) {
    	char []b=J.toCharArray();
    	char []a=S.toCharArray();
    	int count=0;
    	for(int i=0;i<a.length;i++) {
    		for(int j=0;j<b.length;j++) {
    			if(a[i]==b[j])count++;
    		}
    	}
		return count;
        
    }

第二种和第一种差不多,不过是利用函数来查找:

    public static int numJewelsInStones(String J, String S) {
    	char []a=S.toCharArray();
    	int count=0;
    	for(int i=0;i<a.length;i++) {
    		if(J.contains(a[i]+""))count++;
    	}
		return count;
        
    }

第三种利用HashMap存储S,键存放字符,值存放字符出现次数;然后再判断哪些是J里面的字符,并计数:

    public static int numJewelsInStones3(String J, String S) {
    	HashMap<Character, Integer> map=new HashMap<>();
    	char []a=S.toCharArray();
    	for(int i=0;i<a.length;i++) {
    		if(map.containsKey(a[i])) {
    			map.put(a[i], map.get(a[i])+1);
    		}else
    			map.put(a[i], 1);
    	}
    	int count=0;
    	char []b=J.toCharArray();
    	for(int i=0;i<b.length;i++) {
    		if(map.containsKey(b[i])) {
    			count+=map.get(b[i]);
    		}
    	}
        return count;
    }

猜你喜欢

转载自blog.csdn.net/zx2015216856/article/details/80699261