广州那里有学做拼多多网站的,天津视频网站开发团队,wordpress鼠标跟随,哪个网站用div做的好滑动窗口 无重复字符的最长子串滑动窗口 上期经典 无重复字符的最长子串 难度 - 中等 3. 无重复字符的最长子串 给定一个字符串 s #xff0c;请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc… 滑动窗口 无重复字符的最长子串滑动窗口 上期经典 无重复字符的最长子串 难度 - 中等 3. 无重复字符的最长子串 给定一个字符串 s 请你找出其中不含有重复字符的 最长子串 的长度。 示例 1: 输入: s “abcabcbb” 输出: 3 解释: 因为无重复字符的最长子串是 “abc”所以其长度为 3。 示例 2: 输入: s “bbbbb” 输出: 1 解释: 因为无重复字符的最长子串是 “b”所以其长度为 1。 示例 3: 输入: s “pwwkew” 输出: 3 解释: 因为无重复字符的最长子串是 “wke”所以其长度为 3。 请注意你的答案必须是 子串 的长度“pwke” 是一个子序列不是子串。 提示 0 s.length 5 * 1e4 s 由英文字母、数字、符号和空格组成 滑动窗口 所谓滑动窗口其实就是由两个索引维护一个区间满足一定条件时会动态的去调整这个区间。非常像计算机网络里面tcp协议栈里所用到的滑动窗口算法。这里的两个索引的决定了滑动窗口的起点和终点始终保持滑动窗口中的元素是不重复的这题就变成了找到包含非重复元素的最长窗口。 定义left 0 right 0结果保存到res 统计窗口中字符的集合wind区间[left, right)即滑动窗口的区间。区间左闭右开这样方便临界条件计算。 问题的关键就是左右边界如何滑动窗口滑动策略如下 如果s[right]不在wind中把s[right]加入到wind中并更新结果res max(res, right - left 1)right向右滑动直到s[right]在wind中。 如果s[right]在wind中wind删除s[left]left向右滑动直到s[right]不在wind中。 根据上面的策略我们就可以获得以字符串s任意位置为右边界(枚举满足条件的右边界)的所有候选窗口只需要把其中最长的一个窗口的长度返回即可。 代码演示 int lengthOfLongestSubstring(String s) {HashMapCharacter, Integer wind new HashMap();int left 0;int right 0;int ans 0;while (right s.length()){char c s.charAt(right);right;wind.put(c,wind.getOrDefault(c,0) 1);//判断收缩窗口时的条件当出现重复值时while (wind.get(c) 1){char d s.charAt(left);left;wind.put(d,wind.get(d) - 1);}ans Math.max(ans,right - left);}return ans;}上期经典
leetcode438. 找到字符串中所有字母异位词