๐
ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ์ธํฐ๋ทฐ
์ฑ ์ ์ฐธ๊ณ ํ์ต๋๋ค.
๋ฌธ์์ด s๊ฐ ์ฃผ์ด์ง๋ฉด ๋ฐ๋ณต๋๋ ๋ฌธ์์์ด ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ฐพ์ต๋๋ค.
๊ฐ๋ฅํ ๋ชจ๋ ๋ถ๋ถ ๋ฌธ์์ด์ ๋น๊ตํด๋ณด๋ ๋ธ๋ฃจํธํฌ์ค ๋ฐฉ์์ ์๋ ํ์ง๋ง ์๊ฐ ์ด๊ณผ๊ฐ ๋ฐ์ํ๋ค.
์ด ๋ฌธ์ ๋ ์๊ฐ ๋ณต์ก๋ O(n)
์ ํด๊ฒฐํดํ๊ธฐ์ํด ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ํฌ ํฌ์ธํฐ๋ฅผ ํ์ฉํด์ผ ํ๋ค.
์ฌ๋ผ์ด๋ฉ ์๋์ฐ๋ ๋ณดํต ์ ๋ ฌ๋์ง ์์ ๋ฐ์ดํฐ์ ๊ณ ์ ํฌ๊ธฐ ์๋์ฐ๋ฅผ ํตํด ์ฌ์ฉํ๊ณ ํฌ ํฌ์ธํฐ๋ ์ ๋ ฌ๋ ๋ฐ์ดํฐ์ ๊ฐ๋ณ ํฌ๊ธฐ ์๋์ฐ๋ฅผ ์ฌ์ฉํ๋ค.
์ด ๋ฌธ์ ๋ ์ค๋ณต๋๋ ๋ฌธ์๊ฐ ๋ฐ๊ฒฌ๋ ๋๋ ์ค๋ณต๋๋ ๋ฌธ์์ ์์น์ ํ์ฌ ์์์์น๋ฅผ ๋น๊ตํ๋ค. ๋ง์ฝ ์ค๋ณต๋๋ ์์น๊ฐ ๋ ํฌ๋ค๋ฉด ์๋ก์ด ์์ ์์น๊ฐ ๋๋ค.
๋ง์ฝ, ํ๋ฒ๋ ๋ฐ๊ฒฌ๋์ง ์์ ๋ฌธ์๋ผ๋ฉด ๋ฌธ์ ํ๋๊ฐ ์ถ๊ฐ๋์์ผ๋ฏ๋ก ํ์ฌ - ์์ + 1
ํ ๊ธธ์ด์ ์ต๋ ๊ธธ์ด๋ฅผ ๋น๊ตํด ๊ฐฑ์ ํ๋ค.
๋งค ๋ฐ๋ณต๋ง๋ค ํญ์ ํด์ผํ๋ ์ผ์ ๋ฌธ์์ ๋ฐ๋ฅธ ์์น๋ฅผ ๊ฐฑ์ ํ๋ ๊ฒ์ด๋ค.
์ด๊ฒ์ ๋ฌธ์๊ฐ ์ค๋ณต์ด ๋์๋ ์ฒ์ ๋ฐ๊ฒฌ์ด๋ ํญ์ ์์น ๊ฐ ๊ฐฑ์ ์ ์ํํ๋ค.
class Solution:
def lengthOfLongestSubstring(self, s: str) -> int:
# ์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ํฌํฌ์ธํฐ
used = dict()
max_length = start = 0
for index, char in enumerate(s):
'''
์ด๋ฏธ ์๋ ๋ฌธ์๋ผ๋ฉด ๊ทธ ๋ฌธ์ ๋ถํฐ ์์์์น๋ฅผ ์ก์์ผ ํ๋ฉฐ ์์์์น๊ฐ ์ด๋ฏธ ๊ทธ ๋ฌธ์๋ฅผ ๋์ด๊ฐ๋ค๋ฉด
์ค๋ณต๋์ง ์์ผ๋ฏ๋ก ์๋กญ๊ฒ ๊ธธ์ด๋ฅผ ๊ฐฑ์ ํ๋ค.
'''
if char in used and start <= used[char]:
start = used[char] + 1
else:
max_length = max(max_length, index - start + 1)
used[char] = index
return max_length
ํ๋ ์ฃผ์ ํด์ผํ ์ ์ if char in dic ์กฐ๊ฑด ๋์ if dic.get(char) ์กฐ๊ฑด์ ์ฌ์ฉํ๋ฉด ์๋๋ค.
์๋ํ๋ฉด ๋์
๋๋ฆฌ์ ๊ฐ์ผ๋ก ์ธ๋ฑ์ค 0์ด ๊ฐ๋ฅํ๊ธฐ ๋๋ฌธ์ ์กฐ๊ฑด์ด ์๋ํ๋๋ก ๋์ํ์ง ์๋๋ค.