2题目
给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。
答案
class Solution {
public:
int lengthOfLongestSubstring(string s) {
//这里的occ是选取的一段子串,最右侧不是s的最右侧
unordered_set<char> occ;
int n=s.size();
//定义右指针,初始值为-1,也就是最左侧的左侧溢出,ans计算最长子串大小
int rk=-1,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[rk+1]);
++rk;
}
//计算最长子串长度
ans=max(ans,rk-i+1);
}
return ans;
}
};