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

开个新坑,leetcode上面做题目。下面是题目描述:

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

        示例 1:

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

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

        输入: "pwwkew"
        输出: 3
        解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
        请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。 -->
子串呢,顾名思义,就是一连串不间断的,子序列是可以间断的。

下面是我注释了解题思路的答案,这个我没解出来,在网上搜索了一下答案,也都是些其他语言的解法,他们是用hashMap,js没有这个吧,不太一样,

我就关注了一下解题思路。

/**
             * @param {string} s
             * @return {number}
             */
            // 使用双指针解决 + hash
            // 定义一个map用来充当滑块,end往右边走
            // 如果map里没有s[end],就把s[end]丢到map里,同时刷新无重复字符的最大长度
            // 如果map里有s[end],那么就从左边开始删,直到把重复的那个值删掉,重新进入无重复的条件中
            var lengthOfLongestSubstring = function(s) {
                const len = s.length
                let hashMap = new Map()
                let start = 0
                let end = 0
                let maxLen = 0

                while (end < len) {
                    if (!hashMap.has(s[end])) {
                        hashMap.set(s[end++], 1)
                        maxLen = Math.max(maxLen, [...hashMap.keys()].length)
                    } else {
                        hashMap.delete(s[start++])
                    }
                }
                return maxLen
            };

            lengthOfLongestSubstring('abfcdfabcdbb')

这道题就到这里,我们做这种算法题呢,不是为了去什么bat公司,只是为了培养遇到了问题的思路,开拓思路,开阔眼见,如此而已

好记性不如烂笔头,看到自己觉得应该记录的知识点,结合自己的理解进行记录,用于以后回顾。
原文地址:https://www.cnblogs.com/wangxi01/p/10755448.html