标签:删掉 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