美文网首页
3.无重复字符最长子串

3.无重复字符最长子串

作者: 无米学炊 | 来源:发表于2019-06-21 00:15 被阅读0次

    题目

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

    示例 1:

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

    示例 2:

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

    示例 3:

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

    来源:力扣(LeetCode)
    链接:https://leetcode-cn.com/problems/longest-substring-without-repeating-characters
    著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

    答案

    1. 使用游标方式,记录连续字符的开始位置,已经已有字符位置
    var lengthOfLongestSubstring = function(s) {
        let max = 0
        let cached = {}
        let prev = -1
        for (let i = 0, l = s.length; i < l; i++) {
            let c = s[i]
            let exist = cached[c]
            if (exist !== undefined) {
                prev = Math.max(prev, exist)
            }
            max = Math.max(max, i - prev)
            cached[c] = i
        }
        return max
    }
    
    1. 使用字符字串方式:
    var lengthOfLongestSubstring = function(s) {
        let max = 0
        let cached = []
        for (let i = 0, l = s.length; i < l; i++) {
            let c = s[i]
            let idx = cached.indexOf(c)
            if ( idx !== -1 ) {
                max = Math.max(max, cached.length);
                cached.splice(0, idx+1)
            }
            cached.push(c)
        }
        return Math.max(max, cached.length)
    };
    

    相关文章

      网友评论

          本文标题:3.无重复字符最长子串

          本文链接:https://www.haomeiwen.com/subject/whxeqctx.html