菜鸟前端刷算法第三天

26 阅读1分钟

题目描述 - 无重复字符的最长子串

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

如:

  • s = "abcabcbb",输出: 3 ,无重复字符的最长子串是 "abc"。
  • s = "bbbbb",输出: 1 ,无重复字符的最长子串是 "b"。
  • s = "pwwkew",输出: 3 ,无重复字符的最长子串是 "wke"。

思路分析

最简单的思路就是循环遍历所有元素,根据对象键值唯一性的特点,维护一个字符串中唯一元素的字典表,动态计算其长度,循环完成,得到最长字符串。

代码实现:

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let count = 0
    if(!s) return count
    for(let i=0; i<s.length; i++){
        let obj = {}  // 字符串中唯一元素
        let max = 0
        let j=i
        while(j<s.length){
            let item = s[j]
            // 如果字典表中不存在该元素 则 唯一
            if(!obj[item]){
                obj[item] = 1
                max++   
                j++
            }else{
            // 如果字典表中有该元素 碰到了重复元素 循环终止 
                break
            }
        }
        count = Math.max(count, max)
    }
    return count
};