【算法千题案例】每日LeetCode打卡——93.宝石与石头[通俗易懂]

【算法千题案例】每日LeetCode打卡——93.宝石与石头[通俗易懂]算法题打卡:宝石与石头。没有特别幸运,那么请先特别努力,别因为懒惰而失败,还矫情地将原因归于自己倒霉。所以说,树倒了,没有一片雪花是无辜的

大家好,又见面了,我是你们的朋友全栈君。

请添加图片描述


?前言

? 算法题 ?
  • ? 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程?
  • ? 提示:本专栏解题 编程语言一律使用 C# 和 Java 两种进行解题
  • ? 要保持一个每天都在学习的状态,让我们一起努力成为算法大神吧?!
  • ? 今天是力扣算法题持续打卡第93天?!
? 算法题 ?

?原题样例:宝石与石头

给你一个字符串jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头。

stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。

字母区分大小写,因此 "a""A"是不同类型的石头。

示例1:

输入:jewels = "aA", stones = "aAAbbbb"
输出:3

示例2:

输入:jewels = "z", stones = "ZZ"
输出:0

提示:

  • 1 <= jewels.length, stones.length <= 50
  • jewels 和 stones 仅由英文字母组成
  • jewels 中的所有字符都是 唯一的

?C#方法:Linq解法

从题意中可知J中的元素不重复

所以我们可以直接使用 J 初始化 HashSet

代码:

public class Solution { 
   
public int NumJewelsInStones(string J, string S) { 
   
    ICollection<char> jews = new HashSet<char>();
    foreach (var j in J) { 
   
        jews.Add(j);
    }
    int cnt = 0;
    foreach (var s in S) { 
   
        if (jews.Contains(s)) { 
   
            ++cnt;
        }
    }
    return cnt;
}
}

执行结果

通过
执行用时:76 ms,在所有 C# 提交中击败了31.50%的用户
内存消耗:35.4 MB,在所有 C# 提交中击败了37.65%的用户

?Java 方法:暴力法

思路解析
暴力法的思路很直观,遍历字符串 stones,对于 stones 中的每个字符

遍历一次字符串 jewels,如果其和 jewels 中的某一个字符相同,则是宝石。

代码:

class Solution { 
   
    public int numJewelsInStones(String jewels, String stones) { 
   
        int jewelsCount = 0;
        int jewelsLength = jewels.length(), stonesLength = stones.length();
        for (int i = 0; i < stonesLength; i++) { 
   
            char stone = stones.charAt(i);
            for (int j = 0; j < jewelsLength; j++) { 
   
                char jewel = jewels.charAt(j);
                if (stone == jewel) { 
   
                    jewelsCount++;
                    break;
                }
            }
        }
        return jewelsCount;
    }
}

执行结果

通过
执行用时:0 ms,在所有 Java  提交中击败了100.00%的用户
内存消耗:36.8 MB,在所有 Java 提交中击败了97.40%的用户

复杂度分析

时间复杂度:O( mn )其中 m 是字符串 jewels 的长度,n 是字符串 stones 的长度。
空间复杂度:O(1) 

?总结

  • 今天是力扣算法题打卡的第九十三天!
  • 文章采用 C#Java 两种编程语言进行解题
  • 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们
  • 那今天的算法题分享到此结束啦,明天再见!
    请添加图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/163840.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 图形的绘制_二维图形绘制

    图形的绘制_二维图形绘制作者:furenjun本文内容:一.认识System.Drawing类二了解GDI三.掌握常用的绘图方法3.1绘制一些简单的图形3.2绘制一个多色的矩形3.3绘制一个渐变的矩形3.4绘制一个多色渐变的矩形四.应用本文学到的方法打造属于自已的第一批图形4.1电子屏效果4.2霓虹灯效果4.3进度条显示效果 前言   …

    2022年9月6日
    2
  • python检查文件更新失败_恢复自动更新/更新失败解决方法个人汇总[通俗易懂]

    python检查文件更新失败_恢复自动更新/更新失败解决方法个人汇总[通俗易懂]步骤一:服务开启首先,打开任务管理器(快捷键Ctrl+shift+esc)(或者右键开始图标任务管理器(此方法只适应Win8Win10))(或者Ctrl+Alt+Del,点击任务管理器)打开服务选项卡+打开服务找到windowsupdate,右键,属性启动类型改为手动如果要关闭更新请改为禁用步骤二:组策略开启windows微标键+R键呼出【运行】2输入【gpedit.msc】组策略编辑器计算机配…

    2022年5月16日
    30
  • angular面试问题_react基础面试题

    angular面试问题_react基础面试题Angularv8+面试系列Angular面试题汇总1-基本知识Angular面试题汇总2-Component/Service目录Angular中的测试有哪些种,基于哪些测试框架什么是Karma?在Angular中有什么作用?什么是Jasmine?在Angular中有什么用?什么是protractor?单元测试UnitTest什么是Angular中的单元测试?AngularUT的最佳实践测试Service时,有其他依赖如何处理?端到端测试(e2e)Angular中的测试有哪些.

    2022年8月31日
    0
  • 【原创】异步FIFO设计原理详解 (含RTL代码和Testbench代码)

    【原创】异步FIFO设计原理详解 (含RTL代码和Testbench代码)FIFO在硬件上是一种地址依次自增的SingleDulRAM,按读数据和写数据工作的时钟域是否相同分为同步FIFO和异步FIFO,其中同步FIFO是指读时钟和写时钟为同步时钟,常用于数据缓存和数据位宽转换;异步FIFO通常情况下是指读时钟和写时钟频率有差异,即由两个异步时钟驱动的FIFO,由于读写操作是独立的,故常用于多比特数据跨时钟域处理。本文仅讨论异步FIFO的设计。因为FIFO的硬件本质是一块SingleDulRAM,无论它的内部结构和原理如何复杂,最核心的…

    2022年8月13日
    5
  • Javascript Array forEach()中无法return和break,代替方法some()与every()「建议收藏」

    Javascript Array forEach()中无法return和break,代替方法some()与every()「建议收藏」我们都知道for循环里要跳出整个循环是使用break,但在数组中用forEach循环如要退出整个循环使用break会报错,使用return也不能跳出循环。使用break将会报错:vararr=[1,2,3,4,5];varnum=3;arr.forEach(function(v){if(v==num){break;}console.log

    2022年7月13日
    12
  • webstorm 插件_vscode插件开发文档

    webstorm 插件_vscode插件开发文档webstorm集成了很多强大的前端插件。使用的时候只需要在webstorm中搜索plugin就可以出来一堆,选择需要的安装j

    2022年9月10日
    0

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号