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
これがわかりやすい