1+ '''
2+ ํด๊ฒฐ ๋ฐฉ๋ฒ :
3+ 1) ์ฌ๋ผ์ด๋ฉ ์๋์ฐ ๊ธฐ๋ฒ์ ์ฌ์ฉํด ์ค๋ณต ์๋ ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด์ ์ฐพ์
4+ 2) char_index ๋์
๋๋ฆฌ๋ก ๊ฐ ๋ฌธ์์ ๋ง์ง๋ง ๋ฑ์ฅ ์์น๋ฅผ ์ถ์ ํจ
5+ 3) ์ค๋ณต ๋ฌธ์๋ฅผ ๋ฐ๊ฒฌํ๋ฉด start๋ฅผ ์ค๋ณต ๋ฌธ์์ ๋ค์ ์์น๋ก ์ด๋์ํด
6+
7+ ์๊ฐ ๋ณต์ก๋: O(n)
8+ ๋ฌธ์์ด์ ํ ๋ฒ์ฉ ์ํ
9+ ๊ณต๊ฐ ๋ณต์ก๋: O(min(m, n))
10+ (m=๋ฌธ์ ์งํฉ ํฌ๊ธฐ, ๋ณดํต O(1)๋ก ๊ฐ์ฃผ)
11+
12+ Example 1.์ ๊ฒฝ์ฐ s = "abcabcbb"
13+
14+ ๋จ๊ณ end ๋ฌธ์ start char_index max_length
15+ 0 0 a 0 {'a':0} 1
16+ 1 1 b 0 {'a':0, 'b':1} 2
17+ 2 2 c 0 {'a':0, 'b':1, 'c':2} 3
18+ 3 3 a 1 {'a':3, ...} 3
19+ 4 4 b 2 {'b':4, ...} 3
20+ 5 5 c 3 {'c':5, ...} 3
21+ 6 6 b 5 {'b':6, ...} 3
22+ 7 7 b 7 {'b':7, ...} 3
23+
24+ '''
25+
26+ class Solution :
27+ def lengthOfLongestSubstring (self , s : str ) -> int :
28+ char_index = {} # ๊ฐ ๋ฌธ์์ ์ต๊ทผ ์์น ์ ์ฅ
29+ start = 0 # ํ์ฌ ์๋์ฐ ์์ ์ธ๋ฑ์ค
30+ max_length = 0 # ์ต๋ ๊ธธ์ด
31+
32+ # ๋ฌธ์์ด ๋๊น์ง ์ํ
33+ for end in range (len (s )):
34+ # ์ค๋ณต ๋ฌธ์ ํ์ธ -> start ๊ฐฑ์ & ํ์ฌ ๋ฌธ์ ์์น ๊ธฐ๋ก
35+ if s [end ] in char_index and char_index [s [end ]] >= start :
36+ # ์ค๋ณต ๋ฌธ์ ๋ฐ๊ฒฌ: ์์์ ์ ์ค๋ณต ๋ฌธ์ ๋ค์์ผ๋ก ์ด๋
37+ start = char_index [s [end ]] + 1
38+ # ํ์ฌ ๋ฌธ์์ ์์น ๊ฐฑ์
39+ char_index [s [end ]] = end
40+ # ํ์ฌ ์๋์ฐ ๊ธธ์ด ๊ณ์ฐ
41+ current_length = end - start + 1
42+ if current_length > max_length :
43+ # max_length ๊ฐฑ์
44+ max_length = current_length
45+
46+ return max_length
47+
48+
49+
0 commit comments