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);
์ ์ฌ ๋ฌธ์ : https://velog.io/@ken1204/724.-Find-Pivot-Index
Sliding Window ์๊ณ ๋ฆฌ์ฆ ์ฐธ๊ณ ๋งํฌ: https://m.blog.naver.com/kks227/220795165570
๋ฌธ์ ๋ ์ค๋ณต๋๋ ๋ฌธ์๊ฐ ์๋ ๊ฐ์ฅ ๊ธด 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/