[LeetCode] 3. Longest Substring Without Repeating Characters

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

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

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

  • ๋ฌธ์ œ

๋ฌธ์ž์—ด 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
                

๐Ÿ“ ์ •๋ฆฌ


๐ŸŽˆ ์ฐธ๊ณ 


Book ๋งํฌ

profile
Go Go

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