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 and J 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 (宝石与石头)相关推荐

  1. 771. Jewels and Stones 宝石与石头

    给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母 ...

  2. Leetcode771.Jewels and Stones宝石与石头

    给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头. S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. J 中的字母不重复,J 和 S中的所有字符都是字母 ...

  3. Jewels and Stones(宝石和石头)

    1 问题抛出 You're given strings J representing the types of stones that are jewels, and S representing t ...

  4. 宝石与石头(简单难度)

    目录 题目概述(简单难度) 思路与代码 思路展现 代码示例 总结 题目概述(简单难度) 题目链接: 宝石与石头 思路与代码 思路展现 将jewels字符串转换为字符后存入到set集合当中,然后将sto ...

  5. Leetcode771:宝石与石头

    原文链接:771. 宝石与石头 - 力扣(LeetCode) 题目 给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头.stones 中每个字符代表了一 ...

  6. 【每日一题】宝石与石头

    题目描述 给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石 ...

  7. 3600、宝石与石头

    给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. 字母区 ...

  8. LeetCode 771. 宝石与石头(java)

    给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石. 字母区 ...

  9. 【leetcode】771. 宝石与石头 (简单)

    [leetcode]771. 宝石与石头 给你一个字符串 jewels 代表石头中宝石的类型,另有一个字符串 stones 代表你拥有的石头. stones 中每个字符代表了一种你拥有的石头的类型,你 ...

最新文章

  1. WIN7服务优化,别关太多,小心启动不
  2. JUC多线程核心知识-思维导图
  3. 崩溃了,一个HashMap跟面试官扯了半个小时
  4. 【NLP】NLP模型BERT和经典数据集!
  5. boost::hof::flip用法的测试程序
  6. CF1375F-Integer Game【交互】
  7. C++(STL):04---智能指针之weak_ptr
  8. linux的apache2.4限定某个目录禁止解析PHP及user_agent与PHP相关配置
  9. 29 个 PHP 的 Excel 处理类
  10. Sparrow - Distributed, Low Latency Scheduling
  11. Ubuntu 搭建 NVIDIA驱动 CUDA 和 pytorch GPU 环境
  12. 思科模拟器:网络安全实验
  13. 计算机一级考试创建快捷方式,九月计算机一级MSOffice考试试题
  14. 迈普交换机_配置手册_IS420
  15. 详谈利用系统漏洞及mysql提权
  16. 测试知识总结1 —— 测试的分类
  17. leach协议c++代码_leach协议matlab仿真代码
  18. 机器学习算法各个击破
  19. GraphQL和RESTful的区别
  20. DeepLabv3+

热门文章

  1. 韩国精神(2001.08)
  2. 保护个人信息安全,还需“铁腕治理”
  3. python web什么意思_理解Python的Web开发
  4. 存在的就是合理的,发生的即是必然的。
  5. 鲅鱼圈什么地方有计算机培训学校,2017年营口市鲅鱼圈区中等职业技术专业学校计算机应用(160人)...
  6. 机器学习实战(1)——线性分类器+Logistic回归解决良/恶性乳腺癌肿瘤预测问题
  7. 机器学习(聚类四)——K-Means的优化算法
  8. 第十七届全国大学生智能汽车竞赛安徽赛区 暨安徽省第十五届大学生智能汽车竞赛 闭幕式致辞
  9. C# .net GridView编辑行数据
  10. VisionMobile:“只为粉丝”或者小米并非你所想的那样