对于该问题,是寻找一个连续的无重复字符串,解决思路为一个大的for循环,遍历子串左端点坐标,中间套一while循环,对右端点后的若干个字符依次进行判定,若未曾出现在子串中则insert进子串。需要注意的是,对于for中的每一次循环,需要将左端点向右移动,即去除上一阶段的最左段的字符,或在本阶段提前去除该阶段的最左端元素。
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> occ;
int len = s.size();
int rk = -1;
int ans = 0;
for (int i=0; i<len; i++){
//移除上一次循环中的左端点
// if(i != 0){
// occ.erase(s[i-1]);
// }
// 不断右移右端点
while (rk+1<len && !occ.count(s[rk+1])){
occ.insert(s[rk+1]);
rk ++;
}
// 也可为下阶段的过程,移除本阶段的左端点
occ.erase(s[i]);
ans = max(ans,rk-i+1);
}
return ans;
}
};