长沙在线建站模板,erp管理系统的作用,重庆市建设工程信息网18定额宣贯,免费cms建站系统给定一个字符串 s #xff0c;请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”#xff0c;所以其长度为 3。
示例 2:
输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “…给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度。
示例 1:
输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”所以其长度为 3。
示例 2:
输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”所以其长度为 1。
示例 3:
输入: s “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”所以其长度为 3。 请注意你的答案必须是 子串 的长度“pwke” 是一个子序列不是子串。
解题思路 1、用双指针l----i维护一个滑动窗口用来剪切子串。 2、不断移动右指针直到遇到重复字符的时候把左指针移到前面的重复字符的下一位。相当于把前面的重复字符删除 3、移动指针过程中记录窗口长度的最大值即为答案。 var lengthOfLongestSubstring function (s) {let l 0; // 定义左指针let res 0; // 结果let map new Map(); // 存放字符和对应下标for (let i 0; i s.length; i) {// 如果出现了重复字符则把左指针移到重复字符的下一位。注意同时满足重复字符的索引大于左指针。if (map.has(s[i]) map.get(s[i]) l) {l map.get(s[i]) 1;}res Math.max(res, i - l 1); // 计算结果map.set(s[i], i); // 存下每个字符的下标}return res;};在判断是否是重复字符的时候别忘了加上满足重复字符的索引大于左指针 map.get(s[r]) l 这个附加条件不然就会出错。比如 abbcdea这个 case在遍历到最后一个字符 a 的时候如果没有加上这个条件最后一个 a 也会被认为是重复字符从而产生错误。