无重复字符的最长子串
中等
滑动窗口
给定一个字符串 s
,请你找出其中不含有重复字符的 最长 子串 的长度。
源码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int left = -1, len = 0, n = s.size();
vector<int> m(128,-1);
for (int i = 0; i < n; ++i) {
left = max(left,m[s[i]]);
len = max(len,i-left);
m[s[i]] = i;
}
return len;
}
};
流程
分析
时间复杂度:O(N),其中 N 是字符串的长度
空间复杂度:O(∣Σ∣),其中 Σ 表示字符集(即字符串中可以出现的字符),∣Σ∣ 表示字符集的大小。在本题中没有明确说明字符集,因此可以默认为所有 ASCII 码在 [0,128) 内的字符,即∣Σ∣=128。