牛客JS题(十八)子字符串频次

注释很详细,直接上代码
涉及知识点:

  1. 忍者码风
  2. 正则表达式正向预查
  3. &&运算符短路特性
  4. 编程思维

题干:

我的答案

html 复制代码
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
  </head>
  <body>
    <script>
      /**
       * 今天咱玩点特别的,忍者码风,启动!
       * 这题呢我们写了两种写法,正则表达式和indexOf
       * 
       * 正则表达式解法:
       * 对于这题的正则表达式的写法呢,牛客题解区好像没看到正确的写法,
       * 主要是因为他们忽略了正则表达式默认的匹配行为是从上一个匹配结束的位置继续向后查找,也就会忽略重叠部分
       * 小友别焦虑,细想一下什么在匹配时不会消耗字符位置------正向预查    
       * 再提醒一下牛客判题不支持可选链,交题记得去掉
       */
      const _searchStrIndexOf = (str, target) =>
        str.match(new RegExp(`(?=(${target}))`, "g"))?.length || 0;

      console.log(_searchStrIndexOf("ssss", "sss")); //2
      console.log(_searchStrIndexOf("12121212", "212")); //3

      /**
       *  indexOf解法:
       *  计算部分短短一行,细节满满
       *  我们的思路是每次找到字符串出现的位置,下一次从上次出现的位置的下一个字符开始匹配,刚好排除之前匹配到的又可以考虑到重叠的情况
       *  这里有个细节,index初始化会是0吗,习惯性填上0可就噶了,刚开始应该使index+1=0,index初始值自然就是-1了
       *  (a=b)!=-1这个条件怎么理解呢,难不成赋个值还有返回值吗,当然不是,这个条件是先将b的值赋给a然后再直接正常判断a就行了
       *  ++count又是一个细节,如果是count++的话是不是作为条件判断完再加,count在第一次判断时是0,相当于false,所以一定需要++count
       *  别急还有一个细节呢,小友有没有了解过&&运算符的短路特性,如果&&前面的条件为false,后面的条件还会执行吗
       *  答案肯定是不会的,如果会的话咱这题就得返回前先减一了
       */
      const _searchStrIndexOf1 = (str, target) => {
        let count = 0,
          index = -1;
        while ((index = str.indexOf(target, index + 1)) != -1 && ++count);
        return count;
      };
      console.log(_searchStrIndexOf1("ssss", "sss")); //2
    </script>
  </body>
</html>

博客更新不是很及时,需要看后面内容的可以看看我的gitee仓库

牛客JS题Gitee仓库

相关推荐
Roc.Chang2 分钟前
Vue 3 setup 语法糖 computed 的深度使用
前端·javascript·vue.js
玄尺_0075 分钟前
uniapp h5端使浏览器弹出下载框
前端·javascript·uni-app
军军君0111 分钟前
Three.js基础功能学习三:纹理与光照
前端·javascript·3d·前端框架·three·三维·三维框架
淡笑沐白12 分钟前
Vue3基础语法教程
前端·javascript·vue.js
JIngJaneIL20 分钟前
基于java + vue连锁门店管理系统(源码+数据库+文档)
java·开发语言·前端·数据库·vue.js·spring boot
Mintopia20 分钟前
🧠 从零开始:纯手写一个支持流式 JSON 解析的 React Renderer
前端·数据结构·react.js
可触的未来,发芽的智生24 分钟前
2025年终总结:智能涌现的思考→放弃冯诺依曼架构范式,拥抱“约束产生智能”
javascript·人工智能·python·神经网络·程序人生
消失的旧时光-194332 分钟前
Flutter 工程中 mixin 的正确打开方式:5 种高质量设计范式 + mixin vs 继承 vs 组合 + 为什么它比 BasePage 更优雅
前端·flutter·架构
乐吾乐科技35 分钟前
乐吾乐3D可视化2025重大更新与2026升级计划
前端·3d·信息可视化·编辑器·数据可视化
C_心欲无痕36 分钟前
html - 使用视频做天气卡片背景
前端·html·音视频