上一主题 下一主题
ScriptCat,新一代的脚本管理器脚本站,与全世界分享你的用户脚本油猴脚本开发指南教程目录
返回列表 发新帖
楼主: 李恒道 - 

JavaScript 版本KMP

[复制链接]
  • TA的每日心情
    擦汗
    2024-12-18 11:32
  • 签到天数: 194 天

    [LV.7]常住居民III

    730

    主题

    6233

    回帖

    6977

    积分

    管理员

    非物质文化遗产社会摇传承人

    积分
    6977

    荣誉开发者喜迎中秋油中2周年生态建设者

    发表于 2025-1-6 02:50:49 | 显示全部楼层 | 阅读模式

    https://leetcode.cn/problems/find-the-index-of-the-first-occurrence-in-a-string/solutions/732461/dai-ma-sui-xiang-lu-kmpsuan-fa-xiang-jie-mfbs/

    减1版本

    const generateNext = (str) => {
      const arr = [-1];
      let j = -1;
      for (let i = 1; i < str.length; i++) {
        const char = str[i];
        while (j >= 0 && char != str[j + 1]) {
          j = arr[j];
        }
        if (char == str[j + 1]) {
          j++;
        }
        arr[i] = j;
      }
      return arr;
    };
    /**
     * @param {string} haystack
     * @param {string} needle
     * @Return {number}
     */
    var strStr = function (haystack, needle) {
      const next = generateNext(needle);
      let j = -1;
      for (let index = 0; index < haystack.length; index++) {
        const char = haystack[index];
        while (j >= 0 && char !== needle[j + 1]) {
          j = next[j];
        }
        if (char == needle[j + 1]) {
          j++;
        }
        if(j==needle.length-1){
            return index-j
        }
      }
      return -1
    };
    console.log(strStr("hello",'ll'));

    不减1

    const generateNext = (str) => {
      const arr = [0];
      let j = 0;
      for (let i = 1; i < str.length; i++) {
        const char = str[i];
        while (j > 0 && char != str[j]) {
          j = arr[j-1];
        }
        if (char == str[j]) {
          j++;
        }
        arr[i] = j;
      }
      return arr;
    };
    /**
     * @param {string} haystack
     * @param {string} needle
     * @return {number}
     */
    var strStr = function (haystack, needle) {
      const next = generateNext(needle);
      let j = 0;
      for (let index = 0; index < haystack.length; index++) {
        const char = haystack[index];
        while (j > 0 && char !== needle[j]) {
          j = next[j-1];
        }
        if (char == needle[j]) {
          j++;
        }
        if (j == needle.length) {
          return index - j+1;
        }
      }
      return -1;
    };
    混的人。
    ------------------------------------------
    進撃!永遠の帝国の破壊虎---李恒道

    入驻了爱发电https://afdian.com/a/lihengdao666

    发表回复

    本版积分规则

    快速回复 返回顶部 返回列表