zoukankan      html  css  js  c++  java
  • LeetCode算法题-Jewels and Stones(Java实现)

    这是悦乐书的第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+篇,公众号对话框回复【数据结构与算法】、【算法】、【数据结构】中的任一关键词,获取系列文章合集。

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

  • 相关阅读:
    php自定义函数call_user_func和call_user_func_array详解
    微信开发(一) 服务器配置
    6487. 【GDOI2020模拟02.29】列强争霸war
    关于循环顺序对时间影响的一点研究
    6486. 【GDOI2020模拟02.25】向日葵人生
    6485. 【GDOI2020模拟02.25】沙塔斯月光
    6478. 【GDOI2020模拟02.19】C(上下界费用流、费用流消负环)
    6461. 【GDOI2020模拟02.05】生成树(矩阵树及其扩展、二维拉格朗日插值)
    上下界网络流&费用流
    6467. 【GDOI2020模拟02.09】西行寺无余涅槃(FWT的性质)
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/10748210.html
Copyright © 2011-2022 走看看