[LeetCode Medium] Longest Substring Without Repeating Characters JavaScript

IT공부중·2020년 4월 30일
0

알고리즘

목록 보기
23/49

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

문제 설명

string이 주어졌을 때 문자가 안 겹치는 가장 긴 부분 문자열을 찾아내면 된다!

문제 풀이

저는 일단 temp라는 배열을 만들어서 그 안에 하나씩 추가하게 하였습니다. 그리고 temp 안에 문자가 있을 때, 그 문자의 인덱스를 찾아 그 다음부터 끝까지 잘라서 temp에 다시 넣어주고 그 문자를 푸쉬 했습니다.
만약 포함이 안 되어 있다면 그냥 추가 했습니다.
그리고 최대길이를 갱신해주면 됩니다.

내 코드

var lengthOfLongestSubstring = function(s) {
    let temp = [];
    let maxLength = 0;

    for (let i = 0; i < s.length; i++) {
        if (temp.includes(s[i])){
            const index = temp.findIndex((value) => value === s[i]);
            temp = temp.slice(index+1);
            temp.push(s[i]);  
        }
        else {
            temp.push(s[i]);
        }
        maxLength = Math.max(maxLength, temp.length);
    }
    return maxLength;
};

더 좋은 풀이

substring을 이용하면 문자열을 자를 수 있습니다. indexof를 이용해서 해당 문자의 index를 찾을 수 있습니다. 만약 문자가 없다면 -1이 반환 돼서 0부터 끝까지 그대로이고, 문자가 있다면 그 다음부터 자르게 만든 것이다. 그리고 해당 문자를 더해주고 제일 긴 길이를 갱신해주면 된다.

좋은 코드

var lengthOfLongestSubstring = function(s) {
    let longest = 0;
    let current = "";
    
    for (let i = 0; i < s.length; i++) {
        current = current.substring(current.indexOf(s[i]) + 1)        
        current += s[i];
        
        if (current.length > longest) {
            longest = current.length;
        }
    }
    
    return longest;
};
profile
4년차 프론트엔드 개발자 문건우입니다.

0개의 댓글