在做题中学习(44):无重复字符的最长字串

3. 无重复字符的最长子串 - 力扣(LeetCode)

在做题中学习(44):无重复字符的最长字串_第1张图片

解法:同向双指针————“滑动窗口”

思路:如下图,当right进窗口后,就出现了a重复,所以在left出窗口时时,需要跳到第一个a 后面的位置,窗口才合法,而这个操作可以用哈希表来实现(判断是否重复出现就看哈希表里那个位置是否为1),而因为窗口的滑动需要重新算数,所以出窗口时left值要--。

在做题中学习(44):无重复字符的最长字串_第2张图片

1.left = 0,right = 0

2.进窗口————先直接进一个

3.判断————判断是否重复出现就看哈希表里那个位置是否为1

4.出窗口+重复判断————哈希表中left所在字符--

5.更新数据—————选出更长的len

class Solution 
{
public:
    int lengthOfLongestSubstring(string s) 
    {
        int hash[128]={0};
        int len = 0;
        for(int left = 0,right = 0;right1)
            {
                //3.出现重复,出窗口
                hash[s[left++]]--;     
            }
            //4.更新结果
            len = max(len,right - left + 1);
            right++;
            
        }
        return len;
    }
};

你可能感兴趣的:(学习,哈希算法,c++,leetcode,滑动窗口)