3. 无重复字符的最长子串
class Solution { public: int lengthOfLongestSubstring(string s) { unordered_map<char, int> map; int ans = 0; for(int start = 0, end = 0; end < s.size(); end++){ char alpha = s[end]; if(map.find(alpha) != map.end()){ start = max(map[alpha], start); } ans = max(end-start+1, ans); map[alpha] = end+1; } return ans; } };
思路:设置一个map,里面存放值以及如果遇到重复的值,start应该从哪里开始(即值的地方+1),之后每次判断遍历到的值是否重复出现,以及计算当前最大的子串个数。