转圈圈

lengthOfLongestSubstring

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

/**
 *
 * @param {string} s
 * 无重复字符的最长子串
 */
function lengthOfLongestSubstring(s) {
  if (typeof s !== 'string' || s.length === 0) return 0;

  const len = s.length;
  let maxSubstring = s[0];
  let substr = maxSubstring;

  const maxLengthString = (a, b) => {
    let result = a;

    if (a.length < b.length) {
      result = b;
      return result;
    }
    return result;
  };

  for (let i = 1; i <= len; i += 1) {
    if (substr.indexOf(s[i]) === -1) {
      substr += s.substring(i, i + 1);

      maxSubstring = maxLengthString(maxSubstring, substr);
    } else {
      substr = substr.substring((substr.indexOf(s[i]) + 1));
      substr += s[i];
      maxSubstring = maxLengthString(maxSubstring, substr);
    }
  }
  // console.log(maxSubstring);
  return maxSubstring.length;
}

写的测试

/**
 *
 * @param {number} count
 * @param {number} length
 *
 * 生成 指定个数,指定长度随机 数字 字符串数组
 */
function randomString(count, length) {
  const result = [];
  for (let i = 0; i < count; i += 1) {
    let str = '';
    let len = length;
    while (len > 0) {
      str += `${Math.floor(Math.random() * 9 + 1)}`;
      len -= 1;
    }
    result.push(str);
  }
  return result;
}

posted @ 2019-05-20 12:01  rosendolu  阅读(603)  评论(0编辑  收藏  举报