[LeetCode] 3. Longest Substring Without Repeating Characters

서해빈·2021년 3월 2일
0

코딩테스트

목록 보기
4/65

문제 바로가기

처음에 maxLen 업데이트 코드를 잘못 배치했는데 샘플 데이터에서는 잘 돌아가서 그대로 제출했었다.
결국 2번 실패 끝에야 통과... 만약 실제 테스트였으면 고대로 0점이었겠지...
코드 작성 전에 귀찮더라도 알고리즘을 다시 생각해보고, 샘플 데이터를 몇개 더 추가해보자! ✊

Python

class Solution:
    def lengthOfLongestSubstring(self, s: str) -> int:
        sLen = len(s)
        if not sLen:
            return 0
        
        maxLen = 1
        front, rear = 0, 1
        charSet = set(s[:1])

        while rear < sLen:
            currChar = s[rear]
            if currChar in charSet:
                # maxLen 업데이트
                maxLen = max(maxLen, rear - front)
                # set 업데이트
                while s[front] != currChar:
                    charSet.remove(s[front])
                    front += 1
                front += 1
            else:
                # set 추가
                charSet.add(currChar)
                
            rear += 1
            
        maxLen = max(maxLen, rear - front)
        return maxLen 

Javascript

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    const map = new Map();
    const n = s.length;
    let maxLen = 0;
    let start = 0;
    for (let i = 0; i < n; i++) {
        if (map.has(s[i])) {
            maxLen = Math.max(maxLen, i - start);
            start = Math.max(start, map.get(s[i]) + 1);
        }
        map.set(s[i], i);
    }
    
    return Math.max(maxLen, n - start);
};

0개의 댓글