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

Posted liutian1912

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了第五个算法-宝石与石头算法相关的知识,希望对你有一定的参考价值。

    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;
}
}

 





































以上是关于第五个算法-宝石与石头算法的主要内容,如果未能解决你的问题,请参考以下文章

算法千题案例每日LeetCode打卡——93.宝石与石头

算法千题案例每日LeetCode打卡——93.宝石与石头

算法学习771. 宝石与石头(java / c / c++ / python / go / rust)

Python | 宝石与石头

第五个神奇的电梯

LeetCode771. 宝石与石头(C++)