0
点赞
收藏
分享

微信扫一扫

【Leetcode Hot 100 C++】(3)无重复字符的最长子串

才德的女子 2022-04-23 阅读 57

题目描述:


算法思路

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;
    }
};
举报

相关推荐

0 条评论