LeetCode 3. 无重复字符的最长子串

无重复字符的最长子串

题目链接 3. 无重复字符的最长子串

给定一个字符串 s ,请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: s = "abcabcbb"
输出: 3 
解释: 因为无重复字符的最长子串是 "abc",所以其长度为 3。

示例 2:

输入: s = "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b",所以其长度为 1。

示例 3:

输入: s = "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke",所以其长度为 3。
    请注意,你的答案必须是 子串 的长度,"pwke" 是一个子序列,不是子串。

题目解释

在这个字符串里面找一个子数组,我们保证子数组的元素都不重复,返回我们子数组里面的最长的长度.

算法原理

这里我们一分析,我们就可以使用暴力解法,拿到所有的子数组,然后判断.但是这里我们可以使用滑动窗口.既然使用滑动窗口,那么我们就需要一个判断依据,下面就是

收集滑动窗口里面所有的元素,拿到一个新的字符和这些字符判断.

细节补充

这个题目写的比较粗糙,毕竟大家非常熟悉双指针了.大家看代码,我在代码里面写一些注释方面大家理解.

代码编写

class Solution
{
public:
  int lengthOfLongestSubstring(string s)
  {
    int left = 0;
    int right = 0;
    unordered_map m;
    int result = 0;
    for (; right < s.size(); ++right)
    {
      m[s[right]]++;          // 入窗口
      while (m[s[right]] > 1) // 判断
      {
        m[s[left++]]--; // 出窗口
      }
      result = max(result, right - left + 1); // 更新结果
    }
    return result;
  }
};

你可能感兴趣的:(#,滑动窗口,1024程序员节)