第七天
Javascript题目
题目
: 统计某一字符或字符串在另一个字符串中出现的次数(js)
问题解答
解题思路
正则+去重
- 将str1中的所有字符进行遍历, 并对应的找出在另一个字符串中的出现的次数
// 统计某一字符或字符串在另一个字符串中出现的次数
let result = []
function countNum(str1, str2) {
str1 = [...new Set([...str1])] // 对单个字符串中的字符进行去重
for (let i of str1) {
// const reg = new RegExp(param, 'g'); //构造函数的方法
let itemR = str2.match(eval(`/${i}/g`))
result.push({
str: i,
num: itemR ? Array.from(itemR).length : 0
})
}
return result
}
console.log(countNum("dawds_", "ddddaaaawss"));
/*
0: {str: "d", num: 4}
1: {str: "a", num: 4}
2: {str: "w", num: 1}
3: {str: "s", num: 2}
4: {str: "_", num: 0}
*/
使用split 方法
// 统计某一字符或字符串在另一个字符串中出现的次数
function countNum(str1, str2) {
return str2.split(str1).length - 1
}
console.log(countNum("da", "ddddaaaawss")); //1
递归思想
- 原理: 使用indeOf方法
(返回索引号)
先返回该字符第一次出现的位置, 大于1则将字符串进行分隔使用substring方法(从匹配的索引位置到最后的位置) 也可以使用substr方法 , 进行递归操作
function countNum(str1, str2, count = 0) {
// return str2.indexOf(str1) !== -1 ? countNum(str1, str2.substring(str2.indexOf(str1) + str2.length), ++count) : count; //substring方法
return str.indexOf(str1) !== -1 ? countNum(str1, str.substr(str.indexOf(str1) + str1.length, str.length - str.indexOf(str1) + str1.length), ++count) : count;
}
console.log(countNum('d', 'dawdawds'));
let count = 0; // 定义次数 要定义在函数外
function countNum(str1, str) {
if (str.indexOf(str1) !== -1) {
let index = str.indexOf(str1) + str1.length // 递归一次后新的字符串的索引位置
// str = str.substring(index) //substring
str = str.substr(index, str.length - index) // substr
count++;
countNum(str1, str) // 递归
}
return count
}
console.log(countNum('dd', 'dawddawdds'));
includes方法
function countNum(str, target) {
let count = 0;
while (str.includes(target)) {
const index = str.indexOf(target);
count++;
str = str.substring(index + target.length);
}
return count;
}
console.log(countNum('dd', 'dawddawdds'));
知识扩展
- 正则规则动态赋值 使用
eval()
方法, eval函数是一种接受字符串作为参数, 并且可以将接受的字符串转换成js表达式并且立即执行该表达式 substring
和substr
方法 都是截取字符串 第一个的参数为from, to
(不包括to) 第二个为from, length
从from开始截取指定长度的字符串, slice(from, to)
也可以作用于字符串的切割