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

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

传送门: https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

【笔记】可以使用滑动窗口,初始化一个插槽slot[128]全部为-1。当某字母出现时,将其出现的位置存于slot[ s[?] ]=?

其中,if (slot[ s[r] ] > l),说明s[r]s[l..r-1]中的某个字母重复了,这时候需要将左边界滑动到s[r]字母对应的位置,即l = slot[ [s[r] ]

  1. 小写字母z的ASCII码为122;
  2. ASCII码对照表:https://tool.oschina.net/commons?type=4。
class Solution {
public:
int lengthOfLongestSubstring(string& s) {
vector<int> slot(128, -1);
int res = 0;

for (int l = -1, r = 0; r < s.size(); ++r) {
if (slot[ s[r] ] > l) l = slot[ s[r] ]; //更新左边界
slot[ s[r] ] = r;
res = std::max(res, r - l);
}
return res;
}
};