给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
输入: s = "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc",所以其
长度为 3。
解题思路:使用两个指针作为窗口的两个边界,每进行一步操作,左指针就向右移动一个位置。右指针是窗口的又边界,判断下一个字符在set集合中的个数,如果个数为0,则将这个字符添加到set集合中,最后计算左指针和右指针之间字符的个数,选取最大值。
class Solution { public: int lengthOfLongestSubstring(string s) { unordered_set<char> 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])==0){ occ.insert(s[rk+1]); rk++; } ans=max(ans,rk-i+1); } return ans; } };