题目描述:
算法思路
1、本题我的思路是设置两个指针P1,P2,一开始都指向字符串头部,再另设一个集合,如下图所示
2、我们将红色指针指向的元素放入集合中,然后移动红色的指针,若集合中没有此元素,则重复此过程,结果如下所示
3、然后我们发现继续移动红色指针,发现元素不能放入集合中,整个时候,我们需要将集合中蓝色指针所指元素删除,然后再移动蓝色指针。
4、紧接着,我们发现可以继续移动红指针,则重复步骤2
5、之后就一直重复2、3过程,直到红指针遍历结束
最后返回值的问题记得在指针变化的时候适当保存一下就行。
代码 C++
class Solution {
public:
int lengthOfLongestSubstring(string s) {
int result = 0,n = 0;
unordered_map<char , int> map;//以map当作集合
auto i =s.begin();//设置两初始指针
auto j =s.begin();
while(i != s.end()){
if(map.find(*i) == map.end()){
map[*i] = 1;
n++;
i++;
}
else{
map.erase(*j);//移动前面指针时删除元素
j++;
n--;
}
if(n > result){
result = n;//n用于记录每一次结果
}
}
return result;
}
};