771. 寶石與石頭
Difficulty: 簡單
更多LeetCode答案歡迎大家關注我的 Github
給定字符串J
代表石頭中寶石的類型,和字符串 S
代表你擁有的石頭。 S
中每個字符代表了一種你擁有的石頭的類型,你想知道你擁有的石頭中有多少是寶石。
J
中的字母不重複,J
和 S
中的所有字符都是字母。字母區分大小寫,因此"a"
和"A"
是不同類型的石頭。
示例 1:
輸入: J = "aA", S = "aAAbbbb"
輸出: 3
示例 2:
輸入: J = "z", S = "ZZ"
輸出: 0
注意:
S
和J
最多含有50個字母。J
中的字符不重複。
Solution
Language: Java
/**
* 執行用時 :2 ms, 在所有 java 提交中擊敗了53.27%的用戶
* 內存消耗 :34.5 MB, 在所有 java 提交中擊敗了91.21%的用戶
*/
class Solution1 {
public int numJewelsInStones(String J, String S) {
int count = 0;
char[] arr1 = J.toCharArray();
char[] arr2 = S.toCharArray();
Map<Character, Integer> map = new HashMap<>();
for (char c : arr1) {
map.put(c, 1);
}
for (char c : arr2) {
if (map.containsKey(c)) {
count++;
}
}
return count;
}
}
/**
* 利用一個字母hash表來記錄某些字母是否存在,A的ASCII是65,a的ASCII是97,大寫和小寫之間還有一個沒用的字符,所以表的大小應該爲58,這幾個關鍵值都是需要記住的代碼
* 執行用時 :1 ms, 在所有 java 提交中擊敗99.90%的用戶
* 內存消耗 :34.6 MB, 在所有 java 提交中擊敗了91.10%的用戶
*/
class Solution2 {
public int numJewelsInStones(String J, String S) {
int[] hash = new int[58];
int count = 0;
for (char c : J.toCharArray()) {
hash[c - 65] = 1;
}
for (char c : S.toCharArray()) {
if (hash[c - 65] == 1) {
count++;
}
}
return count;
}
}