๐ Longest Substring Without Repeating Characters
๐What I thought
- ํฌํฌ์ธํฐ : ์์ ์์น, ํ์ฌ ์์น ํ์
์์ ์์น : ์ค๋ณต ๋ฌธ์ ๋ฐ์ํ ๋๋ง๋ค ํด๋น ๋ฌธ์๊ฐ ๋ง์ง๋ง์ผ๋ก ๋ฐ๊ฒฌ๋ ์ธ๋ฑ์ค + 1๋ก ์ด๋ ํ์ฌ ์์น : ๊ทธ๋ฅ ํ ์นธ ์ฉ ์ด๋ํ๋ฉด์ ์ค๋ณต๋ฌธ์ ์ฒดํฌ
- ๋ฌธ์๋ ๋ฌธ์ & ๋ง์ง๋ง ๋ฐ๊ฒฌ ์ธ๋ฑ์ค๋ฅผ ์ ์ฅ โ ๋์ ๋๋ฆฌ์ ์ ์ฅํ์ (๊ณ์ ์ฒดํฌํด์ผํ๋ฏ๋ก)
- ๋์ ๋๋ฆฌ์๋ {๋ฌธ์:last idx} ํํ๋ก ๋ค์ด๊ฐ ์์
- ์ค๋ณต ๋ฌธ์์ธ์ง ์๋์ง ์๋ ๋ฐฉ๋ฒ? โ ์ผ๋จ ๋์ ๋๋ฆฌ ์์ ๊ฐ์ด ์์ผ๋ฉด ์ค๋ณต โ ๊ทธ๋ฆฌ๊ณ last idx๊ฐ ์์ ์์น๋ณด๋ค ํฌ๋ฉด(๋ค์ ์์ผ๋ฉด) ์ค๋ณต
- ์ค๋ณต ์๋๋ฉด ์ต๋ ์ค๋ณตX ๊ธธ์ด ๊ฐฑ์
๐ํ์ด
๐Dictionary
class Solution:
def lengthOfLongestSubstring(self, str: str) -> int:
hs = dict() # string : index
st, maxi = 0, 0
for idx, s in enumerate(str):
# ์ค๋ณต ๋ฐ์
if s in hs and hs[s] >= st:
st = hs[s] + 1
# ์ค๋ณต X
else:
maxi = max(maxi, idx-st+1)
hs[s] = idx
return maxi๐What I learned
- ์ฐจ๊ทผ์ฐจ๊ทผ ์๊ฐํ ๊ฑธ ๊ทธ๋๋ก ์ฝ๋๋ก ์ฎ๊ธฐ๋ฉด ๋ค ํ ์ ์๋ค
- ๋์ ๋๋ฆฌ๋ฅผ ์ ํ์ฉํ์ (ex. {๋ฌธ์:๋ง์ง๋ง ๋ฐ๊ฒฌ ์ธ๋ฑ์ค}์ ์ ์ฅ โ ํ์ฌ ํฌ์ธํฐ๋ณด๋ค ๊ฐ๊ฑฐ๋ ํฌ๋ฉด ์ค๋ณต)