leetcode 3. 无重复字符的最长子串

本文最后更新于:2022年6月22日 下午

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

输入: s = “pwwkew”
输出: 3
解释: 因为无重复字符的最长子串是 “wke”,所以其长度为 3。
  请注意,你的答案必须是 子串 的长度,”pwke” 是一个子序列,不是子串。

  • 字串是一个连续的序列,子序列可以是不连续的。

滑动窗口,使用unordered_set作为滑动窗口,使用erace()和insert()函数来删除uset中的元素和插入元素。使用find()查找元素。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char> uset;

int maxv = 0;
int left = 0;
for (int i = 0; i < s.size(); i++)
{
while (uset.find(s[i]) != uset.end())
{
// 如果 窗口中 有s[i], 就在窗口头删除s[left],并把left向后移动
uset.erase(s[left]); // 不能删除s[i],因为left在移动
left++;
}
maxv = max(maxv, i - left + 1);
uset.insert(s[i]); // 最后记得把 当前 s[i] 放入窗口中
}
return maxv;
}
};

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/longest-substring-without-repeating-characters


本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!