首页 > 其他 > 详细

leetcode 3 无重复的最大子列

时间:2021-02-18 16:42:59      阅读:32      评论:0      收藏:0      [点我收藏+]

先上自己的暴力算法,执行的结果是时间效率较差,那就应该有啥比较灵活的做法。

class Solution 
{
public:
    int lengthOfLongestSubstring(string s) 
    {
        int sign = 0;
        int j = 1;
        int max = 0;
        for(int i = 0 ; s[i] ; i++)
        {
            for(j = 1 ; s[i+j] ; j++)
            {
                for(int k = 0 ; k<j ; k++)
                {
                    if(s[i+j] == s[i+k])
                    {
                        sign = 1;
                        break;  
                    }

                }
                if(sign)
                {
                    sign = 0;
                    break;
                }
            }
            if(max<j)
            max = j;            //执行到这里,说明该开头已经检查完毕
        }
        return max;
    }
};

看了一下,是通过滑动窗口的想法,维护两个变量,分别指向窗口的左边界与右边界,不断判断是否有重复的字符, 完成遍历后,最大值也呼之欲出了

class Solution 
{
public:
    int lengthOfLongestSubstring(string s) 
    {
        unordered_set<char> occ;
        int n = size(s);
        int i = -1;
        int j = 0;
        int maxSize = 0;
        for(i = 0 ; i < n ; i++)
        {
            if(i)
            {
                occ.erase(s[i-1]);
            }
            while(j<n && !occ.count(s[j]))
            {
                occ.insert(s[j]);
                j++;
            }
            maxSize = max(maxSize,j-i);
        }
        return maxSize;
    }
};

 

leetcode 3 无重复的最大子列

原文:https://www.cnblogs.com/zhaohhhh/p/14412065.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!