290. Word Pattern in F#
URL
https://leetcode.com/problems/word-pattern/description/
Code
https://github.com/syohex/dotnet-study/blob/master/fsharp/leetcode/problems/0290/main.fsx
let wordPattern (pattern: string) (s: string) : bool =
let rec wordPattern' pattern words m registered =
match pattern, words with
| [], [] -> true
| p1 :: t1, word :: t2 ->
match Map.tryFind p1 m with
| Some (v) ->
if word <> v then
false
else
wordPattern' t1 t2 m registered
| None ->
if Set.contains word registered then
false
else
wordPattern' t1 t2 (Map.add p1 word m) (Set.add word registered)
| _, _ -> failwith "never reach here"
let words = s.Split ' '
if pattern.Length <> words.Length then
false
else
wordPattern' (pattern |> Seq.toList) (words |> Array.toList) Map.empty Set.empty