题目
请从字符串中找出一个最长的不包含重复字符的子字符串,计算该最长子字符串的长度
示例一
输入: “abcabcbb”
输出: 3
解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。
思路
用一个hash来存储已经访问过得字母,然后使用双向指针来记录此时的右边界和左边界。本质上就是求两个相同字母之间的距离的最大值。
代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int n = s.length(), res = 0;
unordered_map<char, int> mydict;
int l = 0;
for(int r = 0;r < n;r++) {
if(mydict.count(s[r]) == 1) l = max(l, mydict[s[r]] + 1);
mydict[s[r]] = r;
res = max(res, r - l + 1);
}
return res;
}
};