码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-04-23 13:01:58      阅读:263      评论:0      收藏:0      [点我收藏+]

标签:删掉   set   解释   序列   字符   ret   func   开始   tco   

开个新坑,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公司,只是为了培养遇到了问题的思路,开拓思路,开阔眼见,如此而已

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

标签:删掉   set   解释   序列   字符   ret   func   开始   tco   

原文地址:https://www.cnblogs.com/wangxi01/p/10755448.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!