思路:设定i跟j一个跟踪前面一个跟踪后面,设定哈希函数unordered_map,通过map的find函数,如果在s[j]的时候在i到j-1的区间内存在相同的字符了,那就把i的位置更新到存在相同字符位置的下一位,以保证区间内所有的字符都没有重复的。如果没有重复的就让j++
注意:用到unordered_map
参考代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<char,int> mp;
int i=0,j=0,ans=0;
while(j<s.length()){
if(mp.find(s[j])!=mp.end()&&i<=mp[s[j]]){
i=mp[s[j]]+1;
}
if(j-i+1>ans)
ans=j-i+1;
mp[s[j]]=j;
j++;
}
return ans;
}
};
注意:map的find函数,如果找到关键字等于val的元素,返回其迭代器,如果找不到,返回end()。