美文网首页程序员算法算法提高之LeetCode刷题
LeetCode算法题-Jewels and Stones(Ja

LeetCode算法题-Jewels and Stones(Ja

作者: 程序员小川 | 来源:发表于2019-04-22 08:37 被阅读18次

    这是悦乐书的第313次更新,第334篇原创

    01 看题和准备

    今天介绍的是LeetCode算法题中Easy级别的第182题(顺位题号是771)。字符串J代表珠宝,S代表你拥有的石头。S中的每个字符都是你拥有的一种石头。计算S中有多少石头也是珠宝。J中的字符不会重复出现,J和S中的所有字符都是英文字母。字母区分大小写,因此“a”被认为是与“A”不同类型的石头。例如:

    输入:J =“aA”,S =“aAAbbbb”

    输出:3


    输入:J =“z”,S =“ZZ”

    输出:0

    注意

    • S和J将由字母组成,长度最多为50。

    • J中的字符不会重复出现。

    本次解题使用的开发工具是eclipse,jdk使用的版本是1.8,环境是win7 64位系统,使用Java语言编写和测试。

    02 第一种解法

    题目的意思是计算出J中的每个字符,在S中出现的次数之和。因为J中的字符不会有重复值,所以可以直接计算,不用担心计算失真。因为是英文字母,所以可以直接使用整型数组,以S中每个字符代表的ASCII值来作为索引,出现次数为值,然后遍历该数组,再以J的每个字符作为索引,累加对应的元素值即可。

    public int numJewelsInStones(String J, String S) {
        int[] arr = new int[128];
        for (char ch : S.toCharArray()) {
            arr[ch]++;    
        }
        int count = 0;
        for (char ch : J.toCharArray()) {
            count += arr[ch];        
        }
        return count;
    }
    

    03 第二种解法

    也可以只使用一个循环来解决,借助字符串的indexOf方法,每次获取S中的一个字符,来判断是否存在于J中,存在就次数加1。

    public int numJewelsInStones(String J, String S) {
        int count = 0;
        for (int i=0; i<S.length(); i++) {
            if (J.indexOf(S.charAt(i)) > -1) {
                count++;
            }
        }
        return count;
    }
    

    04 小结

    算法专题目前已日更超过五个月,算法题文章182+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

    以上就是全部内容,如果大家有什么好的解法思路、建议或者其他问题,可以下方留言交流,点赞、留言、转发就是对我最大的回报和支持!

    相关文章

      网友评论

        本文标题:LeetCode算法题-Jewels and Stones(Ja

        本文链接:https://www.haomeiwen.com/subject/kxeegqtx.html