๐
ํ์ด์ฌ ์๊ณ ๋ฆฌ์ฆ ์ธํฐ๋ทฐ
์ฑ ์ ์ฐธ๊ณ ํ์ต๋๋ค.
๋ฌธ์์ด s๊ฐ ์ฃผ์ด์ง๋ฉด ๋ฐ๋ณต๋๋ ๋ฌธ์์์ด ๊ฐ์ฅ ๊ธด ๋ถ๋ถ ๋ฌธ์์ด์ ๊ธธ์ด๋ฅผ ์ฐพ์ต๋๋ค.
์ฌ๋ผ์ด๋ฉ ์๋์ฐ์ ํฌํฌ์ธํฐ์ ๊ฐ๋ ์ ์ด์ฉํ๋ ๋ฌธ์ .
๋จผ์ ๋ฌธ์์ด์ด ์ค๋ณต๋์ง ์์ ๋๊น์ง ๋ถ๋ถ๋ฌธ์์ด์ ์ถ๊ฐํ๋ค.
๋ง์ฝ, ์ค๋ณต๋ ๋ฌธ์๋ฅผ ๋ง๋๋ฉด ๋ฌด์ํ๋ค. ์ด๋ ๊ฒ ๋ง์ง๋ง ๋ฌธ์๊น์ง ๊ฒ์ฌ๋ฅผ ํ์ ๋ ์ต๋ ๊ธธ์ด๊ฐ ์ ๋ต์ด ๋๋ค.
๋๋ฒ์งธ ๋ฐฉ๋ฒ์ ์ ๋ฐฉ๋ฒ์ ์ข ๋ ๊ฐ์ ํ ๋ฐฉ๋ฒ์ด๋ค.
๋๊ฐ์ด ์ค๋ณต๋ ๋ฌธ์๋ฅผ ๋ง๋ ๋ ๊น์ง ๋ถ๋ถ ๋ฌธ์์ด์ ์ถ๊ฐํ๋ค.
์ค๋ณต๋ ๋ฌธ์๋ฅผ ๋ง๋๋ฉด ์ค๋ณต๋ ๋ฌธ์์ ์ธ๋ฑ์ค ๋ค๋ฅผ ๋ถ๋ถ ๋ฌธ์์ด ์์์ง์ ์ผ๋ก ์ก๋๋ค.
์ด ๋ ์ฃผ์ํด์ผํ๋ ์ ์ ์์์ง์ ์ด ์ด๋ฏธ ์ค๋ณต ๋ฌธ์์ง์ ์ ๋์ด๊ฐ๋ค๋ฉด ์๋กญ๊ฒ ๊ธธ์ด๋ฅผ ๊ฐฑ์ ํด์ค์ผ๋ง ํ๋ค.
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