LeetCode #3 Longest Substring Without Repeating Characters

ieunjung·2020년 9월 9일

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

문제 파악

Given a string s, find the length of the longest substring without repeating characters.
주어진 문자열을 가지고, 반복되는 문자가 없는 가장 긴 문자열을 구하라.

연속된 문자열 중에서 반복되는 문자가 없는 가장 긴 문자열을 구하는 것이 문제의 목표이다.

예제 파악

abcabcbb
abc, 길이는 3

bbbbb
b, 길이는 1

pwwkew
wke, 길이는 3

구하는 것은 부분 문자열(substring)이라는 것을 주의해야한다.

실패 코드

var lengthOfLongestSubstring_failed = function(s) {
    let stack = [], count = 0;
    for (let i = 0; i < s.length; i++) {
        const element = s[i];

        if (stack.indexOf(element) > -1) {
            break;
        }

        stack.push(element);
        count++;
    }

    return count;
};

항상 인덱스 0부터 문자열을 만들기 때문에 pwwkew의 경우, 값이 2가 됨.

성공 코드

/**
 * @param {string} s
 * @return {number}
 */
var lengthOfLongestSubstring = function(s) {
    let maxStr = '', maxLen = 0, currIdx = 0;
    for (let i = 0; i < s.length; i++) {
      const element = s[i];
      currIdx = maxStr.indexOf(element);

      if (currIdx > -1) {
        maxStr = maxStr.substring(currIdx + 1);
      }

      maxStr += element;
      maxLen = Math.max(maxLen, maxStr.length);
    }

    return maxLen;
};

다음 코드에서
반복 문자가 있으면 반복 문자 이후로 다시 문자열을 세팅한다.

if (currIdx > -1) {
  	maxStr = maxStr.substring(currIdx + 1);
}
profile
Done is better than perfect

0개의 댓글