无重复字符的最长子串
- 原题链接
- 思路
- 代码
原题链接
leet hot 100-7
3. 无重复字符的最长子串
思路
声明一个无序map容器,容器里面记录着窗口里面字符的数量 ,如果字符的数量大于1 遍历到s[i]的时候 数量+1 此时如果map里面相关的数量大于1 说明窗口里面有重复值 需要将相关的值减少1 维护最大不同字母数量时间复杂度O(n) 空间复杂度(n)
代码
class Solution {
public:int lengthOfLongestSubstring(string s) {unordered_map<char,int> heap;int res=0;for(int i=0,j=0;i<s.size();i++){heap[s[i]]++; //当前数组里包含该字符的次数while(heap[s[i]]>1)heap[s[j++]]--; //如果大于1 就让后面指针j++同时删除map里的数据 直到遍历到子字符串的那个数为止res=max(i-j+1,res);//判断大小 }return res;}
};