LeetCode|LeetCode3 无重复字符的最长子串(滑动窗口)

题目链接:leetcode3 题目大意

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

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

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

示例3:
输入: “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
解题思路 滑动窗口
【LeetCode|LeetCode3 无重复字符的最长子串(滑动窗口)】由于不需要具体维护窗口内的信息,判重只需要用一个 hashSet 去重即可。所以整个窗口用『双指针』来维护。
实现代码
class Solution { public: int lengthOfLongestSubstring(string s) { int _max = 0, l = 0, r = 0; unordered_set st; st.clear(); for (int i = 0; i < s.size(); i++) { char ch = s[i]; if (st.count(ch) == 0) { st.insert(ch); r ++; } else { //在窗口合法的基础上后移一位 if (s[l] != ch) { //更新窗口头部保证合法 do { st.erase(s[l++]); } while (l < r && s[l] != ch); } l ++; r ++; } //更新答案 if (r - l > _max) { _max = r - l; } }return _max; } };

    推荐阅读