【算法千题案例】每日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 两种编程语言进行解题
  • 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们
  • 那今天的算法题分享到此结束啦,明天再见!
    请添加图片描述
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 从机械硬盘和固态硬盘的结构来看IO

    从机械硬盘和固态硬盘的结构来看IO“磁盘”这个词,对于程序员来说并不陌生,我们知道它是一种存储介质,主要用来存储数据的,可以说常用的中间件基本上都离不开它,比如我们常用的MySQL数据库、kafka消息引擎,甚至redis缓存都离不开磁盘。我们在优化某个业务逻辑的时候,经常需要用到缓存,尽量让热数据都从缓存里读取,因为我们知道磁盘是缓慢的,特别在高并发的场景下,我们要保证极少的请求走磁盘IO。不知道你有没有思考过以下问题: 机械硬盘为什么慢? 机械硬盘有多慢? kafka也是写磁盘的,它却挺快的,为什么?..

  • ArcGIS Engine中的Symbols详解

    ArcGIS Engine中的Symbols详解

  • 什么是UDP攻击_机器人打电话营销效果

    什么是UDP攻击_机器人打电话营销效果UDP协议UDP是一个简单的面向数据报的运输层协议,也是最常见的作为流量攻击最多的一种协议,需要用到UDP的主要都是视频通讯,枪战类实时通讯的游戏类。UDP不提供可靠性,它只是把应用程序传给IP层的数据报发送出去,但并不保证它们能到达目的地。由于UDP传输数据前传输数据之前源端和终端不建立连接,且没有超时重发等机制,故而传输速度很快。UDP攻击UDP攻击是DDoS攻击的一种,是典型的流量型攻击。就好比学校中午放学时的食堂,学生大量飞奔食堂,但食堂窗口就那么多,学生数量太多,就只能挤在窗口前等待。

  • NanoStation M2/5 配置使用指南

    NanoStation M2/5 配置使用指南

  • python for跳过下一个循环_python循环三次跳出循环

    python for跳过下一个循环_python循环三次跳出循环python中如何退出for循环Python中的for循环与其它语言不大一样,但跳出循环还是与大多数语言一样,可以使用关键字continue跳出本次循环或者break跳出整个for循环。break语句:Python中的break语句,就像在C语言中,打破了最小封闭for或while循环。break语句用来终止循环语句,即循环条件没有False条件或者序列还没被完全递归完,也会停止执行循环语句。br…

  • pycharm安装包时报错解决

    pycharm安装包时报错解决pycharm报错:NameError:name’pip’isnotdefineddefdo_install(pkgs):try:#importpiptry:frompip._internalimportmainexceptException:…

发表回复

您的电子邮箱地址不会被公开。

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