3. Longest Substring Without Repeating Characters

๋Š˜๋ณดยท2021๋…„ 10์›” 20์ผ
0

LeetCode

๋ชฉ๋ก ๋ณด๊ธฐ
51/69

๐Ÿ’ก ํ’€์ด

var lengthOfLongestSubstring = function (s) {
  if (!s) return 0;

  let map = new Map();
  for (let i = 0; i < s.length; i++) map.set(s[i], -1);

  let max = 0;
  let start = 0;

  for (let i = 0; i < s.length; i++) {
    if (map.has(s[i])) start = Math.max(start, map.get(s[i]) + 1);

    map.set(s[i], i);
    max = Math.max(max, i - start + 1);
  }
  //   console.table(map);
  //   console.log('max: ', max);

  return max;
};

let s = 'abcabcbb';
lengthOfLongestSubstring(s);

๐Ÿ“ ์ •๋ฆฌ

๋ฌธ์ œ๋Š” ์ค‘๋ณต๋˜๋Š” ๋ฌธ์ž๊ฐ€ ์—†๋Š” ๊ฐ€์žฅ ๊ธด subString์„ ์ฐพ๋Š” ๊ฒƒ์ด๋‹ค.

Two pointers๋ฅผ ์‚ฌ์šฉํ•œ ํ’€์ด๋‹ค. ์ „์— ์‚ดํŽด๋ดค๋˜ Sliding Window ์•Œ๊ณ ๋ฆฌ์ฆ˜์„ ์ด์šฉํ•ด ์œ ์‚ฌํ•˜๊ฒŒ ํ’€์—ˆ๋‹ค. ํ’€์ด ์ˆœ์„œ๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.

  • ๋จผ์ € s์— ์žˆ๋Š” ์•ŒํŒŒ๋ฒณ๋งˆ๋‹ค -1์„ value๊ฐ’์œผ๋กœ ๊ฐ€์ง€๋Š” map์„ ๋งŒ๋“ค์–ด์ค€๋‹ค.

  • ์ดํ›„ start ์ธ๋ฑ์Šค์™€ i(=end)์ธ๋ฑ์Šค๋ฅผ ๋งŒ๋“ค์–ด์ค€๋‹ค.

  • ์ดํ›„ map.set()์„ ์ด์šฉํ•ด key๋Š” s[i], value๋Š” i๋กœ map์„ ์ฑ„์›Œ์ค€๋‹ค.

  • ์ดํ›„ map ์•ˆ์— key๋กœ s[i]๊ฐ€ ์žˆ๋Š”์ง€ ํ™•์ธํ•˜๊ณ (์ค‘๋ณต ํ™•์ธ), ์žˆ๋‹ค๋ฉด start ํฌ์ธํ„ฐ๋ฅผ ์ค‘๋ณต๋๋˜ ์š”์†Œ๋ณด๋‹ค ํ•œ ์นธ ์•ž์œผ๋กœ ๋ฐฐ์น˜ํ•ด์ค€๋‹ค. ๋งŒ์•ฝ start ํฌ์ธํ„ฐ๊ฐ€ ์ค‘๋ณต ์š”์†Œ๋ณด๋‹ค ํฌ๋‹ค๋ฉด ์ž๋ฆฌ๋ฅผ ๊ทธ๋Œ€๋กœ ์œ ์ง€ํ•œ๋‹ค.

  • ๊ทธ๋ฆฌ๊ณ  loop์„ ํ•œ ๋ฒˆ ๋Œ ๋•Œ๋งˆ๋‹ค max ๊ธธ์ด์™€ i(=end) - start + 1(=subString์˜ ๊ธธ์ด์™€ ๊ฐ™๋‹ค.)์„ ๋น„๊ตํ•ด์ค€๋‹ค.

  • ๋‹ค์Œ ์‚ฌ์ง„์€ ๋งˆ์ง€๋ง‰ loop์ด ๋๋‚˜๊ณ  map๊ณผ length์˜ ์ƒํƒœ๋‹ค.

์ˆ˜์ •, ์ง€์ ์„ ํ™˜์˜ํ•ฉ๋‹ˆ๋‹ค!

๋ฌธ์ œ ๋งํฌ

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

LeetCode GitHub

https://github.com/tTab1204/LeetCode

0๊ฐœ์˜ ๋Œ“๊ธ€

๊ด€๋ จ ์ฑ„์šฉ ์ •๋ณด