notes/OJ notes/pages/Leetcode Longest-Substring-Without-Repeating-Characters.md
2022-07-14 09:40:42 +08:00

1.6 KiB

Leetcode Longest-Substring-Without-Repeating-Characters

2022-07-14 09:33

Algorithms:

#algorithm

Data structures:

#DS #string

Difficulty:

#coding_problem #difficulty-medium

Additional tags:

#leetcode

Revisions:

N/A

tag:#<INSERT_TAG_HERE>

Problem

Given a string s, find the length of the longest substring without repeating characters.

Examples

Example 1:

Input: s = "abcabcbb" Output: 3 Explanation: The answer is "abc", with the length of 3.

Example 2:

Input: s = "bbbbb" Output: 1 Explanation: The answer is "b", with the length of 1.

Example 3:

Input: s = "pwwkew" Output: 3 Explanation: The answer is "wke", with the length of 3. Notice that the answer must be a substring, "pwke" is a subsequence and not a substring.

Constraints

  • 0 <= s.length <= 5 * 104
  • s consists of English letters, digits, symbols and spaces.

Thoughts

[!summary] This is a #

Initially, I thought of a lineal algorithm

Solution

Initial solution

class Solution {
public:
  int lengthOfLongestSubstring(string s) {
    unordered_map<char, int> hMap;
    int cur = 0;
    int localMax = 0;

    for (int i = 0; i < s.size(); i++) {
      if (hMap.find(s[i]) == hMap.end()) {
        cur++;
        localMax = max(cur, localMax);
        hMap[s[i]] = i;
      } else {
        i = hMap[s[i]];
        hMap.clear();
        cur = 0;
      }
    }
    return localMax;
  }
};