fontendNote
  • docs
  • sources
    • others
      • 数据结构与算法
        • 第一章:绪论
      • 英语阅读积累词汇
      • git
        • 常用Git命令与技巧
        • sourcetree一直提示输入密码的终极解决方案(亲测有效)
      • case
        • 曲线编辑器
          • canvas实现曲线编辑器
      • 计算机常见单词
    • ts
      • ts 配置参考(带注释)
  • source
    • _about
      • 你可能不知道的 vscode 使用技巧
    • _posts
      • css
        • CSS 优化细则
        • sass
          • sass学习笔记
        • 《css世界》书摘
      • js
        • dom
          • 常用js页面跳转方式
          • 跨浏览器的javascript中鼠标滚轮事件
        • performance
          • js性能优化注意事项
      • node
        • npm-package
          • chokidar
        • node中获取正在运行的全部进程数据
        • node中对路径分隔符的兼容性处理
      • tools
        • 你可能不知道的 vscode 使用技巧
      • leetcode
        • 无重复字符的最长子串
        • 题目
  • scaffolds
    • page
    • post
    • draft
Powered by GitBook
On this page

Was this helpful?

  1. source
  2. _posts
  3. leetcode

无重复字符的最长子串

题目

给定一个字符串,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
     请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

解答:

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let temp = [];
    let result = 0;
    for (let i = 0; i < s.length; i ++) {
        const index = temp.indexOf(s[i]);
        temp.push(s[i]);
         index !== -1 && (temp.splice(0, index + 1));
        result = Math.max(result, temp.length)
    }
    return result;
};

时间复杂度: O(n)

思路: 循环遍历传入的字符串,用一个临时数组存储获取到的子串,用一个变量存储当前不重复子串的最大值。遍历的过程中,如果当前字符与临时数组里没有重复的,就将该字符存入临时数组,同时更新变量取两者的最大值;如果当前字符与临时数组有重复的,记录当前位置,临时数组需要把重复的位置之前的数据都扔掉,继续循环。这样变量里存储的一直是字串的最大值。

PreviousleetcodeNext题目

Last updated 5 years ago

Was this helpful?