力扣hot100——无重复字符最长子串
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
解法思路:
// 滑动窗口:同侧出发,检测右指针元素,当set中没有这个元素就把右指针元素加入,同时右指针右移
// 如果存在则表示这个窗口(左右指针之间)出现重复,则要移动;窗口移动就是左指针右移动,同时删除set中左指针的元素
// 相当于换下一个子串;如果是字串的话,就删除右指针元素,相当于就是set中存储的是不连续的但是不同的字母
class Solution {
public:
int lengthOfLongestSubstring(string s) {
// 滑动窗口:同侧出发,检测右指针元素,当set中没有这个元素就把右指针元素加入,同时右指针右移
// 如果存在则表示这个窗口(左右指针之间)出现重复,则要移动;窗口移动就是左指针右移动,同时删除set中左指针的元素
// 相当于换下一个子串;如果是字串的话,就删除右指针元素,相当于就是set中存储的是不连续的但是不同的字母
unordered_set<char> str_set; // 存储元素
int left = 0, right = 0 ,str_length = 0, result = 0;
while(right < s.size()){
if(str_set.find(s[right]) != str_set.end()){ // 存在
str_set.erase(s[left]); // 移除这个元素 这里如果擦除右指针的元素则可用于查找最长 字串
++left;
--str_length;
}else{
str_set.insert(s[right]);
++right;
++str_length;
}
result = max(str_length,result);
}
return result;
}
};