【LeetCode】Easy: Longest Common Prefix

Longest Common Prefix

https://leetcode.com/problems/longest-common-prefix/

回答

class Solution {
    func longestCommonPrefix(_ strs: [String]) -> String {
        var min = strs.min()!
        while min.count > 0 {
            if strs.filter({ $0.contains(min) }).count == strs.count { return min }
            min = String(min.dropFirst())
        }
        
        min = strs.min()!
        
        while min.count > 0 {
            if strs.filter({ $0.contains(min) }).count == strs.count { return min }
            min = String(min.dropLast())
        }
        
        return ""
    }
}

f:id:hira22_1:20200609074422p:plain

修正

class Solution {
    func longestCommonPrefix(_ strs: [String]) -> String {
        guard var dropFirstMin = strs.min() else { return "" }
        
        while dropFirstMin.count > 0 {
            if strs.filter({ $0.contains(dropFirstMin) }).count == strs.count { break }
            dropFirstMin = String(dropFirstMin.dropFirst())
        }
        
        guard var dropLastMin = strs.min() else { return "" }
        
        while dropLastMin.count > 0 {
            if strs.filter({ $0.contains(dropLastMin) }).count == strs.count { break }
            dropLastMin = String(dropLastMin.dropLast())
        }
        
        return dropFirstMin.count > dropLastMin.count ? dropFirstMin :dropLastMin
    }
}

f:id:hira22_1:20200609095436p:plain

prefix だけでいいのに、共通の文字列を探してしまった…

再修正

class Solution {
    func longestCommonPrefix(_ strs: [String]) -> String {
        guard var min = strs.min() else { return "" }
        
        while min.count > 0 {
            if strs.filter({ $0.hasPrefix(min) }).count == strs.count { break }
            min = String(min.dropLast())
        }
        
        return min
    }
}

f:id:hira22_1:20200609095631p:plain

感想

問題の勘違いで難しくしてしまった。