You're given strings J representing the types of stones that are jewels, and S representing the stones you have. Each character in Sis a type of stone you have. You want to know how many of the stones you have are also jewels.
The letters in J are guaranteed distinct, and all characters in J and S are letters. Letters are case sensitive, so "a" is considered a different type of stone from "A".
Example 1:
Input:J = "aA", S = "aAAbbbb"Output:3
Example 2:
Input:J = "z", S = "ZZ"Output:0
Note:
S and J will consist of letters and have length at most 50.
The characters in J are distinct.
Solution:(错误解法)
https://discuss.leetcode.com/topic/118697/java-o-s-j-time-and-o-1-space
public int numJewelsInStones(String J, String S) {
if(J.length() == 0 || S.length() == 0)
return 0;
// Using helper array for O(1) loopkup when traversing S
int[] jewels = new int[58];
for(int i=0; i
jewels[(J.charAt(i) - 'A')] = 1;
}
int result = 0;
for(int i=0; i
if(jewels[(S.charAt(i) - 'A')] == 1) {
result++;
}
}
return result;
}
}
Why an array of length 58? Two reasons
We need to consider both upper-case and lower-case characters
ASCII of 'z' - 'A' is 58. (https://www.cs.cmu.edu/~pattis/15-1XX/common/handouts/ascii.html)
Thanks to @thaliahard for pointing out the reduction in array size.
网友评论