关于javascript:LeetCode-题解-|-3-无重复字符的最长子串-Javascript

/**
 * @param {string} str
 * @returns number
 * 思路:1.start 与 range 组合成一个窗口,窗口内的子串就是以后最长不反复的字符串
 *      2.range 每次循环递增
 *      3.因为 slice 左闭右开 所以 range 初始值 为1,在获取以后元素时 range 要 - 1
 *      4.一个变量 result 存储以后最终后果,一个变量 resultTmp 存储以后匹配到的后果,当以后匹配 resultTmp 长度大于以后最终后果 result 长度时,resultTmp 笼罩以后最终后果 result
 *      5.以后元素已存在于最长子串resultTmp时,start的值批改为以后元素在resultTmp匹配到的下标+1
 *        (+1是为了新的 start 不蕴含以后反复字符)
 *        (将 start 批改为匹配到的下标+1,而不是 range 的值 是因为下标+1到 range 之间的字符是不反复的)
 */
function lengthOfLongestSubstring(str) {
  let start = 0;
  let range = 1;
  let result = "";
  let resultTmp = "";
  while (range <= str.length) {
    const index = range - 1;
    const findIndex = resultTmp.indexOf(str[index]);
    if (findIndex > -1) {
      start = findIndex + start + 1;
    }
    resultTmp = str.slice(start, range++);
    if (resultTmp.length > result.length) {
      result = resultTmp;
    }
  }
  console.log(result, result.length);
  return result.length;
}
lengthOfLongestSubstring("abcabcbb");
lengthOfLongestSubstring("bbbbb");
lengthOfLongestSubstring("pwwkew");
lengthOfLongestSubstring(" ");

本文由一文多发经营工具平台 EaseWriting 公布

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理