题目描述:
给定一个字符串 s
,请你找出其中不含有重复字符的 最长子串 的长度。
示例:
输入: s = "pwwkew" 输出: 3
基础知识:
哈希集合:1.主要用于存储集合,判断元素是否在集合里面
2.unordered_set存储的不是键值对,而仅存储数据的值,可以通过迭代器来遍历集合中的每个值。
3.集合内元素互不相同
s.erase(pos,i) 删除从pos开始的一共i个元素
s.erase(pos) 删除pos处的一个字符(pos是string类型的迭代器)
s.erase(first,last) 删除从first到last中间的字符(first和last都是string类型的迭代器)
s.count(s[i]) 判断s中是否有s[i]这个元素,若存在则返回true
滑动窗口:(求取某个子串或者子序列最长最短等最值问题或者求某个目标值时使用该方法)
代码运行:
class Solution {
public:
int lengthOfLongestSubstring(string s) {
unordered_set<char>occ;
int n=s.length();
int rk=-1,ans=0;
for(int i=0;i<n;++i){
if(i!=0){
occ.erase(s[i-1]);
}
while(rk+1<n&&!occ.count(s[i])){
occ.insert(s[rk+1]);
++rk;
}
ans=max(ans,rk-i+1);
}
return ans;
}
};