美文网首页
LeeCode 3. Longest Substring Wit

LeeCode 3. Longest Substring Wit

作者: scoyzhao | 来源:发表于2018-03-07 21:34 被阅读0次
    image.png

    题目的意思是找出给出字符串的不重复字串的最大值。最开始,我的想法是,用ES6里的Set结构,因为它可以去掉数组中的重复项,然后,如果去掉后的数组和原来的数组长度不同,那么说明有了重复项。

    /**
     * @param {string} s
     * @return {number}
     */
    var lengthOfLongestSubstring = function (s) {
        var length = 0
        var max = 0
        var lost // 剩余长度
        if (s == '') {
            return 0
        } else {
            var aStr = s.split('') // 把字符串换成数组,方便比较
            for (let i = 0; i <= aStr.length; i++) {
                lost = aStr.length - i
                if (lost < max) {
                    return max
                    break
                }
                for (let j = i + 1; j <= aStr.length; j++) {
                    // 原始长度
                    let l1 = aStr.slice(i, j).length
                    // 去掉重复值以后的长度,这里set的长度用size
                    let l2 = (new Set(aStr.slice(i, j))).size
                    if (l1 == l2) {
                        length = j - i
                        if (length > max) {
                            max = length
                        }
                        continue
                    } else {
                        break
                    }
                }
            }
        }
    };
    

    这里遇到的问题是,针对非常非常的长的字符串,会超时。。。。。


    参考了一个答案,用的方法是滑动窗口算法,就是说,确保窗口里没重复的,往后走,有重复的移动左边的,没问题移动右边的。

    /**
     * @param {string} s
     * @return {number}
     */
    var lengthOfLongestSubstring = function(s) {
        var max = 0, l = 0, r, i
        if(s.length < 2) return s.length
        
        for(r = 1; r < s.length; r++) {
            // 大于0说明有重复的,r-1的意思是从r-1到0位,检查是否有和最右边的有重复的。如果有,i》0
            i = s.lastIndexOf(s[r], r - 1)
            if(i >= 0) {
                max = Math.max(max, r - l)
                // 移动左边到应该到的位置
                l = Math.max(l, i + 1)
            }
        }
        return Math.max(r - l, max)
    };
    

    相关文章

      网友评论

          本文标题:LeeCode 3. Longest Substring Wit

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