[LeetCode/Swift] 14번-Longest common prefix

kimdocs...📄·2022년 7월 30일

Algorithm

목록 보기
4/6
post-thumbnail

0) 문제 링크 : Logest common prefix

1) 문제 접근 과정 및 구현 방법

  • 가장 긴 공통의 prefix를 가질 수 있는 경우는 문자열 배열 중 가장 짧은 문자열일 경우이므로 shortestString을 기준으로한다.
  • 배열을 돌면서 prefix를 배열 모두 가지고 있다면 다음 longest에 저장하고, 다음 인덱스로 넘어간다.
  • prefix를 하나라도 가지고 있지 않다면 이전의 longest를 반환한다.

2) 코드 첨부

class Solution {
    func longestCommonPrefix(_ strs: [String]) -> String {
        guard let shortestString = strs.min() else {
            return ""
        }
        var longest = ""
        for i in 0...shortestString.count {
            let prefix = shortestString.prefix(i)
            var flag = true
    
            for str in strs {
                flag = flag && str.hasPrefix(prefix)
            }
            if flag {
                longest = String(prefix)
            } else {
                return longest
            }
        }
        return longest
    }
}

3) 어려웠던 점

  • Swift 문자열이 생각보다 다루기 까다롭다.. 파이썬으로 해야하낭..
  • 너무 느려서 String 내장 함수를 사용하지 않고 푸는 방법을 공부해야겠다..

+) 정석 같은 코드

class Solution {
    func longestCommonPrefix(_ strs: [String]) -> String {
        guard var `prefix` = strs.min() else { return "" }
        while `prefix`.isEmpty == false {
            if strs.allSatisfy({ $0.hasPrefix(`prefix`) }) { break }
                `prefix`.removeLast()
            }
            return `prefix`
        }
}

allSatisfy 신기..!

profile
👩‍🌾 GitHub: ezidayzi / 📂 Contact: ezidayzi@gmail.com

0개의 댓글