LeetCode 916. Word Subsets in F#
URL
leetcode.com/problems/word-subsets
Code
github.com/syohex/dotnet-study/blob/master/..
let wordSubsets (words1: string list) (words2: string list) : string list =
let toFreq word =
let rec toFreq' cs (acc: int []) =
match cs with
| [] -> acc
| h :: t ->
let index = int h - int 'a'
acc.[index] <- acc.[index] + 1
toFreq' t acc
toFreq' (word |> Seq.toList) (Array.zeroCreate 26)
let isSubset (a: int []) (b: int []) =
seq { 0..25 }
|> Seq.forall (fun i -> a.[i] >= b.[i])
let words2Freq =
words2
|> List.map toFreq
|> List.fold
(fun (acc: int []) freq ->
seq { 0..25 }
|> Seq.iter (fun i -> acc.[i] <- System.Math.Max(acc.[i], freq.[i]))
acc)
(Array.zeroCreate 26)
words1
|> List.filter (fun word ->
let freq = toFreq word
isSubset freq words2Freq)