[LeetCode] 3.ย Longest Substring Without Repeating Characters

yunanยท2021๋…„ 2์›” 3์ผ
0
post-thumbnail

๐Ÿ”ฆ ๋ฌธ์ œ ๋งํฌ

๐Ÿ”Š ํŒŒ์ด์ฌ ์•Œ๊ณ ๋ฆฌ์ฆ˜ ์ธํ„ฐ๋ทฐ ์ฑ…์„ ์ฐธ๊ณ ํ–ˆ์Šต๋‹ˆ๋‹ค.

  • ๋ฌธ์ œ

๋ฌธ์ž์—ด s๊ฐ€ ์ฃผ์–ด์ง€๋ฉด ๋ฐ˜๋ณต๋˜๋Š” ๋ฌธ์ž์—†์ด ๊ฐ€์žฅ ๊ธด ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์˜ ๊ธธ์ด๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.

โœ๏ธ ํ’€์ด


๊ฐ€๋Šฅํ•œ ๋ชจ๋“  ๋ถ€๋ถ„ ๋ฌธ์ž์—ด์„ ๋น„๊ตํ•ด๋ณด๋Š” ๋ธŒ๋ฃจํŠธํฌ์Šค ๋ฐฉ์‹์„ ์‹œ๋„ ํ–ˆ์ง€๋งŒ ์‹œ๊ฐ„ ์ดˆ๊ณผ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค.

์ด ๋ฌธ์ œ๋Š” ์‹œ๊ฐ„ ๋ณต์žก๋„ O(n)์— ํ•ด๊ฒฐํ•ดํ•˜๊ธฐ์œ„ํ•ด ์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ์™€ ํˆฌ ํฌ์ธํ„ฐ๋ฅผ ํ™œ์šฉํ•ด์•ผ ํ•œ๋‹ค.

์Šฌ๋ผ์ด๋”ฉ ์œˆ๋„์šฐ๋Š” ๋ณดํ†ต ์ •๋ ฌ๋˜์ง€ ์•Š์€ ๋ฐ์ดํ„ฐ์— ๊ณ ์ • ํฌ๊ธฐ ์œˆ๋„์šฐ๋ฅผ ํ†ตํ•ด ์‚ฌ์šฉํ•˜๊ณ  ํˆฌ ํฌ์ธํ„ฐ๋Š” ์ •๋ ฌ๋œ ๋ฐ์ดํ„ฐ์— ๊ฐ€๋ณ€ ํฌ๊ธฐ ์œˆ๋„์šฐ๋ฅผ ์‚ฌ์šฉํ•œ๋‹ค.

  • ๋ฌธ์ œ ํ•ด๊ฒฐ ๊ณผ์ •
  1. ์ด ๋ฌธ์ œ๋Š” ์ค‘๋ณต๋˜๋Š” ๋ฌธ์ž๊ฐ€ ๋ฐœ๊ฒฌ๋  ๋•Œ๋Š” ์ค‘๋ณต๋˜๋Š” ๋ฌธ์ž์˜ ์œ„์น˜์™€ ํ˜„์žฌ ์‹œ์ž‘์œ„์น˜๋ฅผ ๋น„๊ตํ•œ๋‹ค. ๋งŒ์•ฝ ์ค‘๋ณต๋˜๋Š” ์œ„์น˜๊ฐ€ ๋” ํฌ๋‹ค๋ฉด ์ƒˆ๋กœ์šด ์‹œ์ž‘ ์œ„์น˜๊ฐ€ ๋œ๋‹ค.

  2. ๋งŒ์•ฝ, ํ•œ๋ฒˆ๋„ ๋ฐœ๊ฒฌ๋˜์ง€ ์•Š์€ ๋ฌธ์ž๋ผ๋ฉด ๋ฌธ์ž ํ•˜๋‚˜๊ฐ€ ์ถ”๊ฐ€๋˜์—ˆ์œผ๋ฏ€๋กœ ํ˜„์žฌ - ์‹œ์ž‘ + 1 ํ•œ ๊ธธ์ด์™€ ์ตœ๋Œ€ ๊ธธ์ด๋ฅผ ๋น„๊ตํ•ด ๊ฐฑ์‹ ํ•œ๋‹ค.

  3. ๋งค ๋ฐ˜๋ณต๋งˆ๋‹ค ํ•ญ์ƒ ํ•ด์•ผํ•˜๋Š” ์ผ์€ ๋ฌธ์ž์— ๋”ฐ๋ฅธ ์œ„์น˜๋ฅผ ๊ฐฑ์‹ ํ•˜๋Š” ๊ฒƒ์ด๋‹ค.
    ์ด๊ฒƒ์€ ๋ฌธ์ž๊ฐ€ ์ค‘๋ณต์ด ๋˜์—ˆ๋“  ์ฒ˜์Œ ๋ฐœ๊ฒฌ์ด๋“  ํ•ญ์ƒ ์œ„์น˜ ๊ฐ’ ๊ฐฑ์‹ ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค.

๐Ÿ›  ์ฝ”๋“œ


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์ด ๊ฐ€๋Šฅํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์กฐ๊ฑด์ด ์˜๋„ํ•œ๋Œ€๋กœ ๋™์ž‘ํ•˜์ง€ ์•Š๋Š”๋‹ค.

๐ŸŽˆ ์ฐธ๊ณ 


Book ๋งํฌ

profile
Go Go

0๊ฐœ์˜ ๋Œ“๊ธ€