LeetCodeの Longest Common Prefix をSwiftでやった

class Solution {
    func longestCommonPrefix(_ strs: [String]) -> String {
        if strs.count == 0 { return "" }
        
        func m(_ n1: String, _ n2: String) -> Bool {
            return n1.count < n2.count
        }
        
        var minStr = strs.min(by: m)!
        
        for str in strs {
            while !str.hasPrefix(minStr) {
                minStr.removeLast()
            }
        }
        
        return minStr
    }
}

Swift初心者メモ

longestCommonPrefix(_ strs: [String]) の _ は呼び出し側で引数名の省略を可能にするキーワード。

strs.min(by: m)! の m の部分に (_ n1, _ n2) -> Bool {} をインラインで書いたらコンパイルエラー。

var minStr = strs.min(by: m)! で末尾の ! を消すと Stringではなく Optional(" ") が返り、Stringを返さなければいけないのでコンパイルエラー。

var minStr = strs.min(by: m)! この部分は

var minStr = (strs.min{$0.count < $1.count})!

こんな感じでクロージャ使って短くかける

クロージャの書き方は

arrays - What does $0 and $1 mean in Swift Closures? - Stack Overflow

これがわかりやすい