題目描述:
給定字符串J 代表石頭中寶石的類型,和字符串 S代表你擁有的石頭。 S 中每個字符代表了一種你擁有的石頭的類型,你想知道你擁有的石頭中有多少是寶石。J 中的字母不重複,J 和 S中的所有字符都是字母。字母區分大小寫,因此"a"和"A"是不同類型的石頭。
分析:
也就是說我們需要從S串中統計包含J串中元素的個數。所以:
1.先將J(寶石)放進HashMap中,並且一開始元素對應的value(寶石的數量)爲0;
2.從左向右遍歷串S,如果存在HashMap中的key就更新對應的value(寶石數量);此處的更新利用的是map中put方法去重的特性------>也就是重複插入key相同的鍵值對時,新的value會覆蓋之前所對應的value;
3.每次更新寶石數量時,統計寶石總數;
代碼:
class Solution {
public int numJewelsInStones(String J, String S) {
//1.將寶石放進map裏邊--->開始默認值都爲0
Map<Character,Integer> m=new HashMap<>();
for(int i=0;i<J.length();i++)
{
m.put(J.charAt(i),0);
}
int count=0;
//2.依次從前遍歷S的每個字符在map中記錄--->更新石頭中寶石的數量
for(int j=0;j<S.length();j++)
{
Character ch=S.charAt(j);
if(m.containsKey(ch))//如果是寶石,更新寶石map的數量
{
m.put(ch,m.get(ch)+1);
count++;
}
}
return count;
}
}