1. Jewels and Stones (宝石与石头)
Jewels and Stones
leetcode 771
题目
You're given strings J
representing the types of stones that are jewels, and S
representing the stones you have. Each character in S
is a type of stone you have. You want to know how many of the stones you have are also jewels.
The letters in J
are guaranteed distinct, and all characters in J
and S
are letters. Letters are case sensitive, so "a"
is considered a different type of stone from "A"
.
Example 1:
Input: J = "aA", S = "aAAbbbb"
Output: 3
Example 2:
Input: J = "z", S = "ZZ"
Output: 0
Note:
S
andJ
will consist of letters and have length at most 50.- The characters in
J
are distinct.
中文版
给定字符串J
代表石头中宝石的类型,和字符串 S
代表你拥有的石头。 S
中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
J
中的字母不重复,J
和 S
中的所有字符都是字母。字母区分大小写,因此"a"
和"A"
是不同类型的石头。
以下代码基于 jdk 1.8
解法一
反正宝石列表中的字母不重复,直接暴力循环判断相等
时间复杂度 O(s*j)
public int numJewelsInStones(String J, String S) {int num = 0;char[] js = J.toCharArray();char[] ss = S.toCharArray();for (int i=0;i<js.length;i++){for (int j = 0; j < ss.length; j++) {if (js[i] == ss[j]){num++;}}}return num;}
提交结果如下:
Runtime: 1 ms, faster than 98.29% of Java online submissions for Jewels and Stones.
Memory Usage: 33.9 MB, less than 100.00% of Java online submissions for Jewels and Stones.
public char[] toCharArray() {// Cannot use Arrays.copyOf because of class initialization order issueschar result[] = new char[value.length];System.arraycopy(value, 0, result, 0, value.length);return result;
}
来波小优化,稍微看下以上 toCharArray() 方法的实现,就会发现里面是进行了一次数组的拷贝,所以效率稍慢,而基于下面两点
1、indexOf() 方法直接遍历String类内部的字符数组,而不用经过数组拷贝
2、J中的元素不重复,所以可对每块石头进行判断,判断其是不是宝石,如果属于宝石,就可直接 break
解法二
public int numJewelsInStones(String J, String S) {int num = 0;char[] ss = S.toCharArray();for (int i=0;i<ss.length;i++){if (J.indexOf(ss[i]) > -1){num++;}}return num;}
提交结果如下:
Runtime: 0 ms, faster than 100.00% of Java online submissions for Jewels and Stones.
Memory Usage: 33.6 MB, less than 100.00% of Java online submissions for Jewels and Stones.
然而以上两个其实都差不多,基本是一样的,没啥意思 ……
再看下题目,其实发现就是个多次查找的过程,而想想查找里时间复杂度最低的,估计就是哈希表了,所以直接用HashSet,先存入所有宝石类型字符,然后对所有石头字符,依次计算其 hashCode,直接判断其是不是宝石即可,代码如下,时间复杂度O(m+n) 吧
解法三
public int numJewelsInStones(String J, String S) {int num = 0;Set set = new HashSet();for (char c:J.toCharArray()){set.add(c);}for (char s:S.toCharArray()){if (set.contains(s))num++;}return num;
}
运行结果如下,时间上倒是慢了好多,估计是所给字符串长度均较短,还有方法内部原因吧
Runtime: 2 ms, faster than 69.41% of Java online submissions for Jewels and Stones.
Memory Usage: 33.8 MB, less than 100.00% of Java online submissions for Jewels and Stones.
1. Jewels and Stones (宝石与石头)相关推荐
- 771. Jewels and Stones 宝石与石头
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母 ...
- Leetcode771.Jewels and Stones宝石与石头
给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母 ...
- Jewels and Stones(宝石和石头)
1 问题抛出 You're given strings J representing the types of stones that are jewels, and S representing t ...
- 宝石与石头(简单难度)
目录 题目概述(简单难度) 思路与代码 思路展现 代码示例 总结 题目概述(简单难度) 题目链接: 宝石与石头 思路与代码 思路展现 将jewels字符串转换为字符后存入到set集合当中,然后将sto ...
- Leetcode771:宝石与石头
原文链接:771. 宝石与石头 - 力扣(LeetCode) 题目 给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头.stones 中每个字符代表了一 ...
- 【每日一题】宝石与石头
题目描述 给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石 ...
- 3600、宝石与石头
给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. 字母区 ...
- LeetCode 771. 宝石与石头(java)
给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. 字母区 ...
- 【leetcode】771. 宝石与石头 (简单)
[leetcode]771. 宝石与石头 给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你 ...
最新文章
- WIN7服务优化,别关太多,小心启动不
- JUC多线程核心知识-思维导图
- 崩溃了,一个HashMap跟面试官扯了半个小时
- 【NLP】NLP模型BERT和经典数据集!
- boost::hof::flip用法的测试程序
- CF1375F-Integer Game【交互】
- C++(STL):04---智能指针之weak_ptr
- linux的apache2.4限定某个目录禁止解析PHP及user_agent与PHP相关配置
- 29 个 PHP 的 Excel 处理类
- Sparrow - Distributed, Low Latency Scheduling
- Ubuntu 搭建 NVIDIA驱动 CUDA 和 pytorch GPU 环境
- 思科模拟器:网络安全实验
- 计算机一级考试创建快捷方式,九月计算机一级MSOffice考试试题
- 迈普交换机_配置手册_IS420
- 详谈利用系统漏洞及mysql提权
- 测试知识总结1 —— 测试的分类
- leach协议c++代码_leach协议matlab仿真代码
- 机器学习算法各个击破
- GraphQL和RESTful的区别
- DeepLabv3+
热门文章
- 韩国精神(2001.08)
- 保护个人信息安全,还需“铁腕治理”
- python web什么意思_理解Python的Web开发
- 存在的就是合理的,发生的即是必然的。
- 鲅鱼圈什么地方有计算机培训学校,2017年营口市鲅鱼圈区中等职业技术专业学校计算机应用(160人)...
- 机器学习实战(1)——线性分类器+Logistic回归解决良/恶性乳腺癌肿瘤预测问题
- 机器学习(聚类四)——K-Means的优化算法
- 第十七届全国大学生智能汽车竞赛安徽赛区 暨安徽省第十五届大学生智能汽车竞赛 闭幕式致辞
- C# .net GridView编辑行数据
- VisionMobile:“只为粉丝”或者小米并非你所想的那样