[LeetCode]3. Longest Substring without repeating characters (javascript)

728x90
반응형

if(checked[s[i]]) 부분에서 위치가 0일때도 안나왔던 것처럼 인식해서 애먹었다; ㅠ 

undefined로 명시적으로 처리해줬다. 

Input: s = "abcabcbb"

 뒤의 a가 등장하면 a의 위치는 3으로 바뀌고 문자열 시작위치는 이전 a의 뒤인 b(1)이 되어

가장 긴 문자열은 bca가 된다.

 

** 찾아보니 Map을 사용해서 풀면 코드를 더 간단히 할 수 있을 것 같다 

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    const checked={};
    let result=0;
    let start=0;
    for(let i=0;i<s.length;i+=1){
        //마지막 위치가 문자열이 시작된 후에 등장한 거라면 고려한다. start가 문자열의 시작 위치이므로
        // 그전에 등장하면 무시한다.
        if(checked[s[i]]!==undefined && start<=checked[s[i]]){
            start=checked[s[i]]+1;
        }else{
        	길이 계속 갱신 (1씩 늘린다)
            result=result>(i-start+1)?result:(i-start+1);
        }
        checked[s[i]]=i; //각 문자의 마지막 위치 갱신 
    }
    return result;
    
};

 

728x90
반응형
TAGS.

Comments