LeetCode 409. Longest Palindrome in F#
URL
leetcode.com/problems/longest-palindrome
Code
github.com/syohex/dotnet-study/blob/master/..
let longestPalindrome (s: string) : int =
let rec toFreq chars m =
match chars with
| [] -> m
| c :: cs ->
match Map.tryFind c m with
| Some (v) -> toFreq cs (Map.add c (v + 1) m)
| None -> toFreq cs (Map.add c 1 m)
let rec longestPalindrome' keys freq ret hasOdd =
match keys with
| [] -> ret + (if hasOdd then 1 else 0)
| h :: t ->
let count = Map.find h freq
if count % 2 = 0 then
longestPalindrome' t freq (ret + count) hasOdd
else
longestPalindrome' t freq (ret + (count - 1)) true
let freq = toFreq (s |> Seq.toList) Map.empty
longestPalindrome' (freq |> Map.keys |> Seq.toList) freq 0 false