传送门:无重复字符的最长子串
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;}
};