ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Leetcode hot100(8) 无重复字符的最长子串

Leetcode hot100(8) 无重复字符的最长子串 题目分析双指针法 也叫滑动窗口法左指针在序列的开头开始 右指针在-1位置开始右指针开始从0向右移动当移动到有和左右指针形成的窗口中 重复的字符时 把重复之前的字符串记录放到哈希集合中然后左指针向右移动 直到无重复的字符 右字符开始重复执行class Solution { public: int lengthOfLongestSubstring(string s) { //哈希集合 记录每个字符是否出现过 unordered_setchar occ; int n s.size(); int rk -1;//右指针 int ans 0; for(int i 0;i n;i){ if(i!0){ //左指针向右移动一格 occ.erase(s[i-1]); } while (rk 1 n !occ.count(s[rk 1])){ //不断移动有指针 occ.insert(s[rk1]); rk; } ans max(ans,rk-i1); } return ans; } };左右指针都从左边开始class Solution { public: int lengthOfLongestSubstring(string s) { int n s.size(); if (n 1) return n; unordered_setchar occ; // 改名避免遮蔽 string s int ans 0; int left 0; for (int r 0; r n; r) { // 当窗口内存在重复字符时不断收缩左边界 while (occ.count(s[r])) { occ.erase(s[left]); // 先移除左指针指向的字符 left; // 再移动左指针 } occ.insert(s[r]); // 将当前字符加入窗口 ans max(ans, r - left 1); // 使用圆括号更新最大长度 } return ans; // 记得返回 } };
RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进