Date:2019-3-30
题目地址:https://leetcode-cn.com/problems/jewels-and-stones/
题目:
给定字符串J
代表石头中宝石的类型,和字符串 S
代表你拥有的石头。 S
中每个字符代表了一种你拥有的石头的类型,你想知道你拥有的石头中有多少是宝石。J
中的字母不重复,J
和 S
中的所有字符都是字母。字母区分大小写,因此"a"
和"A"
是不同类型的石头。
示例1:
输入:
J = “aA”, S = “aAAbbbb”
输出:
3
示例2:
输入:
J = “z”, S = “ZZ”
输出:
0
注意:
S
和J
最多含有50个字母。J
中的字符不重复。
提示:For each stone, check if it is a jewel. 检查每个石头是否是宝石
考察点:字符串内取,另外一个字符串的每位的 关键字
解法:
const numJewelsInStones = (J, S) => {
if (J.length > 50 || S.length > 50) {
return 0
}
let total = 0
// 方法 1 操作数组
J.split('').forEach(key => {
const itemTotal = S.split('').filter(item => item === key).length
total += itemTotal
})
// 方法 2 正则匹配
const Len = S.length
J.split('').forEach(key => {
const stones = S.replace(new RegExp(key, 'g'), '')
const itemTotal = Len - stones.length
total += itemTotal
})
return total
};
在实际中的应用场景:
在做字符串显示优化的时候可以用到此方法
例如,做了关键字筛选后,字体高亮部分的截取等。