传送门:无重复字符的最长子串
Problem/题意
给一个由英文、数字、符号、空格组成的字符串,找出其中不含有重复字符
的最长子串
的长度。
比如:abb 包含了重复字符 b;abc 没有包含重复字符。
注意是子串,不是子序列。
Thought/思路
要知道一个区间内是否包含了重复字符,我们可以用 哈希
来保存现有字符的存在情况。
不断扩大数组长度,当遇到重复字符的时候就停止扩大,然后结算一次答案。
最后移动左指针的时候将其对应字符标记为未访问
即可。
Code/代码
class Solution {
public:
int lengthOfLongestSubstring(string s) {
std::map <char, int> mp;
int ans = 0;
for (int l = 0, r = -1; l < s.length(); ++ l) {
while (mp[s[r + 1]] != 1 && r + 1 < s.length()) {
mp[s[++ r]] = 1;
}
ans = std::max(ans, r - l + 1);
mp[s[l]] = 0;
}
return ans;
}
};