给定字符串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; }