LeetCode 3. Longest Substring Without Repeating Characters in F#

URL

leetcode.com/problems/longest-substring-wit..

Code

github.com/syohex/dotnet-study/blob/master/..

open System

let lengthOfLongestSubstring (s: string) : int =
    let rec lengthOfLongestSubstring' cs len (start: int) pos ret =
        match cs with
        | [] -> Math.Max(ret, len - start)
        | (i, c) :: rest ->
            match Map.tryFind c pos with
            | None -> lengthOfLongestSubstring' rest len start (Map.add c i pos) ret
            | Some (j) ->
                let start' = j + 1
                let ret' = Math.Max(ret, i - start)
                lengthOfLongestSubstring' rest len start' (Map.add c i pos) ret'

    let cs =
        s |> Seq.mapi (fun i c -> i, c) |> Seq.toList

    lengthOfLongestSubstring' cs s.Length 0 Map.empty 0