1.思路
(1)设置指针left指向目前不重复子串最左端位置,右指针right指向字符串s当前遍历位置。
(2)设置一个set用来存储子串中已经有的字符,每次right右移时检查set:
(2.1)如果right所指字符不在set中,指针right所指字符加入set。
(2.2)如果right所指字符在set中存在,则left开始右移,并且每次移动都从set中删除left所指字符,直到set中不存在当前right所指字符停止。
(3)计算更新子串长度,子串长度 = right - left + 1。
2.代码记录
#include <unordered_set>
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.size();
if(n == 0){
return 0;
}
int left = 0;
int re = 0;
unordered_set<char> set;
for(int right = 0; right < n; ++right){
while(set.find(s[right]) != set.end()){
set.erase(s[left]);
++left;
}
set.insert(s[right]);
re = max(re, (right - left + 1));
}
return re;
}
};