NC41 #最长无重复子串#

最长无重复子串

http://www.nowcoder.com/practice/b56799ebfd684fb394bd315e89324fb4

双指针。
要注意的是18行left = max(left, index + 1);一定不要忘记加max,因为left这次不是一步一步往前走了,是往前跳跃,跳跃的时候有可能直接跳过了未来可能出现的“重复数字”。

class Solution {
public:
    /**
     * 
     * @param arr int整型vector the array
     * @return int整型
     */
    int maxLength(vector<int>& arr) {
        int len = arr.size();
        int left= 0, right = 0, maxlen = 0;
        unordered_map<int, int> map;
        while(right < len)
        {
            if(map.find(arr[right]) != map.end())
            {
                int index = map.find(arr[right])->second;
                // 一定要注意这点用max!
                left = max(left, index + 1);
            }
            map[arr[right]] = right;
            if(right - left + 1 > maxlen) maxlen = right - left + 1;
            right++;
        }
        return maxlen;
    }
};
全部评论

相关推荐

09-01 09:00
已编辑
四川旅游学院 运营
牛客55195891...:主要是专业不好,别的没毛病
牛客解忧铺
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务