第七天

  • 题目来源: 前端每日知识3+1

Javascript题目

题目 : 统计某一字符或字符串在另一个字符串中出现的次数(js)

问题解答

解题思路

  • 统计某一字符或字符串在另一个字符串中出现的次数

正则+去重

  • 将str1中的所有字符进行遍历, 并对应的找出在另一个字符串中的出现的次数
  1. // 统计某一字符或字符串在另一个字符串中出现的次数
  2. let result = []
  3. function countNum(str1, str2) {
  4. str1 = [...new Set([...str1])] // 对单个字符串中的字符进行去重
  5. for (let i of str1) {
  6. // const reg = new RegExp(param, 'g'); //构造函数的方法
  7. let itemR = str2.match(eval(`/${i}/g`))
  8. result.push({
  9. str: i,
  10. num: itemR ? Array.from(itemR).length : 0
  11. })
  12. }
  13. return result
  14. }
  15. console.log(countNum("dawds_", "ddddaaaawss"));
  16. /*
  17. 0: {str: "d", num: 4}
  18. 1: {str: "a", num: 4}
  19. 2: {str: "w", num: 1}
  20. 3: {str: "s", num: 2}
  21. 4: {str: "_", num: 0}
  22. */

使用split 方法

  1. // 统计某一字符或字符串在另一个字符串中出现的次数
  2. function countNum(str1, str2) {
  3. return str2.split(str1).length - 1
  4. }
  5. console.log(countNum("da", "ddddaaaawss")); //1

递归思想

  • 原理: 使用indeOf方法(返回索引号)先返回该字符第一次出现的位置, 大于1则将字符串进行分隔使用substring方法(从匹配的索引位置到最后的位置) 也可以使用substr方法 , 进行递归操作
  1. function countNum(str1, str2, count = 0) {
  2. // return str2.indexOf(str1) !== -1 ? countNum(str1, str2.substring(str2.indexOf(str1) + str2.length), ++count) : count; //substring方法
  3. return str.indexOf(str1) !== -1 ? countNum(str1, str.substr(str.indexOf(str1) + str1.length, str.length - str.indexOf(str1) + str1.length), ++count) : count;
  4. }
  5. console.log(countNum('d', 'dawdawds'));
  • 详解
  1. let count = 0; // 定义次数 要定义在函数外
  2. function countNum(str1, str) {
  3. if (str.indexOf(str1) !== -1) {
  4. let index = str.indexOf(str1) + str1.length // 递归一次后新的字符串的索引位置
  5. // str = str.substring(index) //substring
  6. str = str.substr(index, str.length - index) // substr
  7. count++;
  8. countNum(str1, str) // 递归
  9. }
  10. return count
  11. }
  12. console.log(countNum('dd', 'dawddawdds'));

includes方法

  1. function countNum(str, target) {
  2. let count = 0;
  3. while (str.includes(target)) {
  4. const index = str.indexOf(target);
  5. count++;
  6. str = str.substring(index + target.length);
  7. }
  8. return count;
  9. }
  10. console.log(countNum('dd', 'dawddawdds'));

知识扩展

  • 正则规则动态赋值 使用eval()方法, eval函数是一种接受字符串作为参数, 并且可以将接受的字符串转换成js表达式并且立即执行该表达式
  • substringsubstr方法 都是截取字符串 第一个的参数为from, to(不包括to) 第二个为from, length 从from开始截取指定长度的字符串, slice(from, to)也可以作用于字符串的切割