解题方案:
- 本题有于字符个数为有限,字符的 ASCII 码范围为 0 ~ 127,哈希表 dic 最多使用 O(128) = O(1)大小的额外空间,所以采用双指针(滑动窗口)+哈希表方案。
#include<algorithm>
class Solution {
public:
int lengthOfLongestSubstring(string s) {
//去除不符合条件的输入
if(s.size()==0)return 0;
//左指针
int left = -1;
//索引
int index = 0;
//最大间距
int res=0;
map<char,int>mymap;
for(;index<=s.size()-1;++index){
if(mymap.count(s[index])){
//如果map中存在,查看是否需要更新左指针位置,这里选用max是不允许left后退,如果后退就将窗口变大了
left = max(left,(mymap.find(s[index])->second);
}
mymap[s[index]]=index;
res = max(res,index-left);
}
return res;
}
};
具体举例说明::
left = max(left,(mymap.find(s[index]))->second);而不是left = find(s[index])->second;