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

LeetCode https://leetcode.cn/problems/longest-substring-without-repeating-characters/

题目描述

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

思路

利用滑动窗口求解
遍历字符串, 当字符在滑动窗口中(出现重复), 更新窗口, 将最左边的元素移除, 直到满足要求

代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
class Solution {
public:
int lengthOfLongestSubstring(std::string s) {
std::vector<char> window;
int max = 0;
for (int i = 0; i < s.size(); i++) {
auto size = window.size() - 1;
char c = s[i];
if (size >= 0) {
for (int j = size, count = 0; j >= 0; j--, count++) {
if (window[j] == c) {
window.erase(window.begin(), window.begin() + (window.size() - count));
break;
}
}
}
window.push_back(c);
auto len = window.size();
if (len > max)
max = len;
}
return max;
}
};