PS/LeetCode

[LeetCode] 3. Longest Substring Without Repeating Characters

Hamp 2024. 10. 24. 23:00
반응형

문제

https://leetcode.com/problems/longest-substring-without-repeating-characters/description/

입력

s: String = 문자열

0 <= s.length <= 5 * 104

결과

ans: Int = 가장 긴 반복되지 않은 부분문자열 길이

해석

이제는 생각보다 빠르게 카테고리를 캐치해낸 것 같다. 

두개의 포인터를 가지고 이전에 나왔던 문자열이 나오면 왼쪽 인덱스가 증가하고 그렇지 않으면
오른쪽 인덱스가 증가하는 조건이 될 것 같다.

 

코드

import Foundation

class Solution {

    func lengthOfLongestSubstring(_ s: String) -> Int {
        let arr = Array(s)        

        let n = arr.count
        var ans: Int = 0
        var l: Int = 0
        var r: Int = 0

        var checkDict: [Character: Bool] = [:] // 중복체크 딕셔너리 

        while r < n {
            
            if checkDict[arr[r], default: false] == false { // 존재하지 않을 때 
                checkDict[arr[r]] = true
                r += 1
            } else { // 존재할 때 
                ans = max(ans, r - l) // 길이 측정 
                checkDict[arr[l]] = false 
                l += 1  
            }
             
        }

        ans = max(ans, r-l) // 마지막 체크
        
        return ans
    }
}

 

 

반응형