给你一个字符串jewels
代表石头中宝石的类型,另有一个字符串 stones
代表你拥有的石头。
stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
字母区分大小写,因此 "a"
和 "A"
是不同类型的石头。
示例1:
输入:jewels = "aA", stones = "aAAbbbb"
输出:3
示例2:
输入:jewels = "z", stones = "ZZ"
输出:0
提示:
从题意中可知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%的用户
思路解析 暴力法的思路很直观,遍历字符串 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
两种编程语言进行解题