第五个算法-宝石与石头算法

    1. 题目

      给定字符串 J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。  J 中的字母不重复,J 和 S中的所有字符都是字母。字母区分大小写,因此"a""A"是不同类型的石头。 

    2. 分析 
      给两个字符串,对比一个字符串在另一个字符串中的数据中重复的个数

      • 要求: 
        字母区分大小写 
        求拥有的总数
    3. 测试数据 
      输入:J = "aA", S = "aAAbbbb"  输出:3 
      输入:J = "z", S = "ZZ"  输出:0

    4. 参考答案 
      算法思想: 

      • 先求出S中石头分别重复的个数组成数组
      • 遍历数据跟J中的字符对比累加
      • public int numJewelsInStones(String J, String S) {
        int count = 0;
        Map<String,Integer> map = new HashMap<String,Integer>();
        for (int i =0;i<S.length();i++){
        String sv = String.valueOf(S.charAt(i));
        if(map.containsKey(sv)){
        map.put(sv,map.get(sv)+1);
        }else{
        map.put(sv,1);
        }
        }

        for (int i =0;i<J.length();i++){

        char s =J.charAt(i);
        count=map.get(String.valueOf(s))==null?0+count:map.get(String.valueOf(s))+count;
        }
        return count;
        }

      5,优秀解法

        

class Solution {
public int numJewelsInStones(String J, String S) {
int result = 0;
char[] s = new char[128];
for (char c : S.toCharArray()) {
s[c]++;
}
for (char j : J.toCharArray()) {
result += s[j];
}
return result;
}
}

猜你喜欢

转载自www.cnblogs.com/liutian1912/p/9293866.html