注意:题目要求的是返回最长子串长度,而不是最长子串字符串
方法:滑动窗口,顾名思义:假设有一个窗口(哈希表)然后扫过字符串,具体步骤如下。
代码实现:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int length=s.size();//记录字符串s的长度
if(length==0){
return 0;//边界情况
}
unordered_set<char>st;//创建哈希表st,以便后续操作
int maxLength=0;//记录最长子串长度,初值赋值为0
int right=-1;//用来移动查看字符
for(int i=0;i<length&&right+1<length;i++){
//每右移一位,删去最左边的字符,但开始时不删去,因为此时哈希表st为空
if(i!=0){
st.erase(s[i-1]);
}
//由于在哈希表中的字符必然是不重复的,所以无需让right回溯
while(right+1<length&&st.count(s[right+1])==0){
st.insert(s[right+1]);//满足条件,插入哈希表中
right++;//right指针右移
}
maxLength=max(maxLength,right-i+1);//如果有更长的子串就更新子串长度
}
return maxLength;
}
};