JS实现的算法(四)--不重复最长子串

269 阅读1分钟

给定一个字符串,请你找出其中不含有重复字符的最长子串的长度。(题目来自leetcode)

示例:

输入: "abcabcbb"

输出: 3

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

解法:

var lengthOfLongestSubstring = function(s) {
  let str = "";
  let longest = 0
  for(let i = 0; i < s.length; i ++) {
      const index = str.indexOf(s[i]);
      if(index < 0) {
          str += s[i]
      } else {
          // 如果有重复的,找到前面出现的位置,那从这个位置的后一位起,一直到当前的位置肯定是没有重复的,且长度最大
          str = str.substr(index + 1) + s[i];
      }
      if (str.length > longest) {
          longest = str.length
      }
  }
  
  return longest;
};