无重复字符的最长子串

184 阅读1分钟

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

示例:

给定 "abcabcbb" ,没有重复字符的最长子串是 "abc" ,那么长度就是3。

给定 "bbbbb" ,最长的子串就是 "b" ,长度是1。

给定 "pwwkew" ,最长子串是 "wke" ,长度是3。请注意答案必须是一个子串,"pwke" 是 子序列 而不是子串。

/**
     * @param {string} s
     * @return {number}
     */
    var lengthOfLongestSubstring = function (s) {
      if (!s || typeof s !== "string") return
      var max;
      var maxNum = 1
      for (var i = 0, l = s.length; i < l; i++) {
        max = 1;
        for (var j = i + maxNum; j < l; j++) {
          if (j - i === 1 && s[j] !== s[i]) {
            max++
            maxNum = max > maxNum ? max : maxNum
            continue
          }
          var str = s.substr(i, j - 1)
          if (str.indexOf(s[j]) === -1) {
            max++
            maxNum = max > maxNum ? max : maxNum
          } else {
            break
          }
        }
      }
      return maxNum
    };
/**
     * @param {string} s
     * @return {number}
     */
    var lengthOfLongestSubstring = function (s) {
      if (!s || typeof s !== "string") return
      var _obj = {};
      var l = s.length;
      var k = 0;
      var i = 0;
      var maxNum = 1;
      while (i < l) {
        if (!_obj[s[i]]) {
          _obj[s[i]] = 1;
          i++
        }
        if (_obj[s[i]] === 1) {
          maxNum = i - k > maxNum ? i - k : maxNum;
          k++
          i = k;
          _obj = {}
        }
      }
      return maxNum
    };