题目
思路
使用boolean数组。ASCII码中字母的跨度为65~122,定义数组长度为58最节省,数组名为exist,如果字符在宝石中出现,则exist对应的中值为true表示对应的宝石存在,再遍历石头字符串。如果对应编码的宝石存在则计数器加一。
代码
import java.util.Scanner;
public class Main {
public static int numJewelsInStones(String jewels, String stones) {
if (jewels == null || stones == null || jewels.isEmpty() || stones.isEmpty()) {
return 0;
}
//用于存储宝石数量
int count = 0;
//考虑更高的空间性能,使用boolean数组。ASCII码中字母的跨度为65~122,所以定义数组长度为58最节省
boolean[] exist = new boolean['z' - 'A' + 1];
for (char c : jewels.toCharArray()) {
exist[c - 'A'] = true;
}
for (char c : stones.toCharArray()) {
//如果这个字符在宝石中存在,则宝石数量加一
if (exist[c - 'A']) {
count++;
}
}
return count;
}
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String a= scanner.next();
String b= scanner.next();
System.out.println(numJewelsInStones(a, b));
}
}