๐Ÿ“– 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

  1. ์ฐจ๊ทผ์ฐจ๊ทผ ์ƒ๊ฐํ•œ ๊ฑธ ๊ทธ๋Œ€๋กœ ์ฝ”๋“œ๋กœ ์˜ฎ๊ธฐ๋ฉด ๋‹ค ํ’€ ์ˆ˜ ์žˆ๋‹ค
  2. ๋”•์…”๋„ˆ๋ฆฌ๋ฅผ ์ž˜ ํ™œ์šฉํ•˜์ž (ex. {๋ฌธ์ž:๋งˆ์ง€๋ง‰ ๋ฐœ๊ฒฌ ์ธ๋ฑ์Šค}์— ์ €์žฅ โ†’ ํ˜„์žฌ ํฌ์ธํ„ฐ๋ณด๋‹ค ๊ฐ™๊ฑฐ๋‚˜ ํฌ๋ฉด ์ค‘๋ณต)

๐Ÿ“–๊ด€๋ จ ์ง€์‹

๐Ÿ“ŽHash Table

๐Ÿ“ŽDictionary