LeetCode题解及面试

【LeetCode】3. Longest Substring W

2019-12-06  本文已影响0人  LeetPub

题意

给定一个字符串,找出没有重复字符的最长子串;

解答

一般这种重复字符串、重复数字都优先考虑滑动窗口(使用左右边界两个指针实现。
对于滑动窗口简单说明:(l是左边界,r是右边界)

针对找出没有重复字符的最长子串这种问题,最根本是找到最大的滑动窗口,且最大的滑动窗口中没有重复的字符,遵循的原则是如果即将进入滑动窗口右边界字符已经存在滑动窗口中,为了保证无重复字符串,则滑动窗口左边界要向右移动到已经存在字符的下一个位置,这样才能使将要进入的字符进入滑动窗口

针对字符串pwwkew为例:

代码

class Solution {
public:
    int lengthOfLongestSubstring(string s) {
        int res = 0;
        unordered_map<char, int> pos;
        for(int l = 0, r = 0; r < s.length(); ++ r) {
            if (pos.count(s[r])){
                l = max(l, pos[s[r]]+1);
            }
            pos[s[r]] = r;
            res = max(res, r-l+1);
        }
        return res;
    }
};

上一篇下一篇

猜你喜欢

热点阅读