Leetcode - Longest Substring Without Repeating Characters

wanderer-s·2021년 12월 11일
0

Algorithm

목록 보기
3/19
post-thumbnail

Problem

Longest Substring Without Repeating Characters
Given a string s, find the length of the longest substring without repeating characters.

주어진 문자열 s에서 반복되지 않는 가장 긴 문자열의 길이를 구해라

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.

Solution

JavaScript

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
  // 전형적인 sliding window algorithm 문제여서 어렵지 않게 접근할 수 있었다
    let maxLength = 0,
        // {}와 Map으로 둘다 해봤더니 Map이 미세하게 결과가 좋았다,
        strMap = new Map()
        start = 0
    
    for(let end = 0; end < s.length; end++) {
        const char = s[end]
        const charIdx = strMap.get(char)
        if(charIdx >= start) {
          // 반복되는 문자가 나오는 순간 start의 값을
          // 이전 문자의 idx + 1 값으로 바꿔준다(새롭게 길이를 쟤야하기 때문에)
            start = charIdx + 1
        }
        //해당 문자의 idx를 Map에 저장
        strMap.set(char, end)
        maxLength = Math.max(maxLength, end - start + 1)
    }
    
    return maxLength
};

Feedback은 언제나 환영입니다🤗

profile
You only get one life. It's actually your duty to live it as fully as possible.

0개의 댓글