LeetCode 433. Minimum Genetic Mutation in F#
URL
leetcode.com/problems/minimum-genetic-mutat..
Code
github.com/syohex/dotnet-study/blob/master/..
let minMutation (start: string) (last: string) (bank: string list) : int =
let isOneMutation (a: string) (b: string) : bool =
(seq { 0..7 }
|> Seq.filter (fun i -> a.[i] = b.[i])
|> Seq.length) = 7
let rec minMutation' gene target steps bank visited =
if gene = target then
steps
else
let candidates =
bank
|> List.filter (fun b ->
(Set.contains b visited |> not)
&& isOneMutation gene b)
candidates
|> List.fold
(fun acc cand ->
let acc' = minMutation' cand target (steps + 1) bank (Set.add cand visited)
System.Math.Min(acc, acc'))
System.Int32.MaxValue
let minSteps = minMutation' start last 0 bank (Set.empty |> Set.add start)
if minSteps = System.Int32.MaxValue then
-1
else
minSteps