Date:2019-3-30

题目地址:https://leetcode-cn.com/problems/jewels-and-stones/

题目:

给定字符串J 代表石头中宝石的类型,和字符串 S代表你拥有的石头。 S 中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。
J 中的字母不重复,JS中的所有字符都是字母。字母区分大小写,因此"a""A"是不同类型的石头。
示例1:
输入:

J = “aA”, S = “aAAbbbb”

输出:

3

示例2:
输入:

J = “z”, S = “ZZ”

输出:

0

注意:

  • SJ 最多含有50个字母。
  • J 中的字符不重复。

提示:For each stone, check if it is a jewel. 检查每个石头是否是宝石

考察点:字符串内取,另外一个字符串的每位的 关键字

解法:

  1. const numJewelsInStones = (J, S) => {
  2. if (J.length > 50 || S.length > 50) {
  3. return 0
  4. }
  5. let total = 0
  6. // 方法 1 操作数组
  7. J.split('').forEach(key => {
  8. const itemTotal = S.split('').filter(item => item === key).length
  9. total += itemTotal
  10. })
  11. // 方法 2 正则匹配
  12. const Len = S.length
  13. J.split('').forEach(key => {
  14. const stones = S.replace(new RegExp(key, 'g'), '')
  15. const itemTotal = Len - stones.length
  16. total += itemTotal
  17. })
  18. return total
  19. };

在实际中的应用场景:

在做字符串显示优化的时候可以用到此方法
例如,做了关键字筛选后,字体高亮部分的截取等。