Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
|
|
@ -0,0 +1,14 @@
|
|||
defmodule LCS do
|
||||
def lcs(a, b) do
|
||||
lcs(to_charlist(a), to_charlist(b), []) |> to_string
|
||||
end
|
||||
|
||||
defp lcs([h|at], [h|bt], res), do: lcs(at, bt, [h|res])
|
||||
defp lcs([_|at]=a, [_|bt]=b, res) do
|
||||
Enum.max_by([lcs(a, bt, res), lcs(at, b, res)], &length/1)
|
||||
end
|
||||
defp lcs(_, _, res), do: res |> Enum.reverse
|
||||
end
|
||||
|
||||
IO.puts LCS.lcs("thisisatest", "testing123testing")
|
||||
IO.puts LCS.lcs('1234','1224533324')
|
||||
|
|
@ -0,0 +1,40 @@
|
|||
defmodule LCS do
|
||||
def lcs_length(s,t), do: lcs_length(s,t,Map.new) |> elem(0)
|
||||
|
||||
defp lcs_length([],t,cache), do: {0,Map.put(cache,{[],t},0)}
|
||||
defp lcs_length(s,[],cache), do: {0,Map.put(cache,{s,[]},0)}
|
||||
defp lcs_length([h|st]=s,[h|tt]=t,cache) do
|
||||
{l,c} = lcs_length(st,tt,cache)
|
||||
{l+1,Map.put(c,{s,t},l+1)}
|
||||
end
|
||||
defp lcs_length([_sh|st]=s,[_th|tt]=t,cache) do
|
||||
if Map.has_key?(cache,{s,t}) do
|
||||
{Map.get(cache,{s,t}),cache}
|
||||
else
|
||||
{l1,c1} = lcs_length(s,tt,cache)
|
||||
{l2,c2} = lcs_length(st,t,c1)
|
||||
l = max(l1,l2)
|
||||
{l,Map.put(c2,{s,t},l)}
|
||||
end
|
||||
end
|
||||
|
||||
def lcs(s,t) do
|
||||
{s,t} = {to_charlist(s),to_charlist(t)}
|
||||
{_,c} = lcs_length(s,t,Map.new)
|
||||
lcs(s,t,c,[]) |> to_string
|
||||
end
|
||||
|
||||
defp lcs([],_,_,acc), do: Enum.reverse(acc)
|
||||
defp lcs(_,[],_,acc), do: Enum.reverse(acc)
|
||||
defp lcs([h|st],[h|tt],cache,acc), do: lcs(st,tt,cache,[h|acc])
|
||||
defp lcs([_sh|st]=s,[_th|tt]=t,cache,acc) do
|
||||
if Map.get(cache,{s,tt}) > Map.get(cache,{st,t}) do
|
||||
lcs(s,tt,cache,acc)
|
||||
else
|
||||
lcs(st,t,cache,acc)
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
IO.puts LCS.lcs("thisisatest","testing123testing")
|
||||
IO.puts LCS.lcs("1234","1224533324")
|
||||
Loading…
Add table
Add a link
Reference in a new issue