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

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

  • 相关阅读:
    PLSQL学习笔记 wm_concat
    Oracle ERP 公司间往来的解决方案(转载)
    Excel单元格设成只读
    PLSQL笔记 存在性检查
    PL/SQL编程技巧
    查看Oracle EBS克隆Clone时间
    用wm_concat合并行及merge into更新
    商务英语900句
    外企公司常用英文缩写
    ASP.NET 2.0 XML 系列(5):用XmlReader读取XML文档
  • 原文地址:https://www.cnblogs.com/xiaochuan94/p/10748210.html
Copyright © 2020-2023  润新知