第七天
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)也可以作用于字符串的切割