- 给定一个字符串 s ,请你找出其中不含有重复字符的 最长 子串 的长度。
示例 1:
输入: s = “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
示例 2:
输入: s = “bbbbb”
输出: 1
解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。
示例 3:
输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
请注意,你的答案必须是 子串 的长度,“pwke” 是一个子序列,不是子串。
class Solution
{
public:
int lengthOfLongestSubstring(string s)
{
unordered_set<char> char_set;
// 左边index
int left = 0;
// 最长大小
int length_size = 0;
// 右边index 移动
for (int right = 0; right < s.size(); ++right)
{
// 右边index 出现重复
while (char_set.count(s[right]))
{
// 删除重复,直到不存在重复
char_set.erase(s[left]);
left++;
}
// 右边没有重复的情况下 将右边插入
char_set.insert(s[right]);
// 更新最大的长度
length_size = length_size > char_set.size() ? length_size : char_set.size();
}
return length_size;
}
};