Longest substring without duplicate characters

https://leetcode-cn.com/problems/longest-substring-without-repeating-characters/

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

示例 1:

输入: “abcabcbb”

输出: 3

解释: 因为无重复字符的最长子串是 “abc”,所以其长度为 3。

示例 2:

输入: “bbbbb”

输出: 1

解释: 因为无重复字符的最长子串是 “b”,所以其长度为 1。

示例 3:

输入: “pwwkew”

输出: 3

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

解答:

利用滑动窗口机制。分别设立一个左指针和右指针,右指针向右侧移动,相当于扩大该滑动窗口的大小。对于每个s[b]的值,判断其是否已经在窗口内出现过。如果出现过,则将s[a]移动到出现过的位置的下一个位置。然后,更新右指针和滑动窗口的最大长度。


class Solution
{
public:
  int lengthOfLongestSubstring(string s)
  {
      int start(0), end(0), length(0), result(0);
      int sSize = int(s.size());
      while (end < sSize)
      {
          char tmpChar = s[end];
          for (int index = start; index < end; index++)
          {
              if (tmpChar == s[index])
              {
                  start = index + 1;
                  length = end - start;
                  break;
              }
          }

          end++;
          length++;
          result = max(result, length);
      }
      return result;
  }
};