3.无重复字符的最长子串
思路:滑动窗口
在 C++ 中,std::unordered_map 是一个哈希表实现的关联容器,用于存储键值对。要在 std::unordered_map 变量中查找特定的键,可以使用 find() 成员函数。
find() 函数返回一个迭代器,指向要查找的键值对。如果键存在于 std::unordered_map 中,则迭代器指向该键值对;否则,迭代器指向 std::unordered_map::end()。
滑动窗口模版
//外层循环扩展右边界,内层循环扩展左边界
for (int l = 0, r = 0 ; r < n ; r++) {
//当前考虑的元素
while (l <= r && check()) {//区间[left,right]不符合题意
//扩展左边界
}
//区间[left,right]符合题意,统计相关信息
}
代码:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_map<int,int>hash;
int i=-1;//左指针,字符串开头的前一个位置,所以最后取j-i是长度
int res=0;
for(int j=0;j<s.size();j++){//枚举右指针
if(hash.find(s[j])!=hash.end()){//找到了,哈希表中出现过,移动左指针
i=max(i,hash[s[j]]);//取max是保证左指针不会回退
}
hash[s[j]]=j;//记录/更新哈希表
res=max(res,j-i);
}
return res;
}
};
对于max的举例