????前言
???? 算法题 ????
???? 每天打卡一道算法题,既是一个学习过程,又是一个分享的过程????
???? 提示:本专栏解题 编程语言一律使用 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
两种编程语言进行解题 - 一些方法也是参考力扣大神写的,也是边学习边分享,再次感谢算法大佬们
- 那今天的算法题分享到此结束啦,明天再见!