-- | Länge einer längsten gemeinsamen Teilfolge
lcs :: Eq a => [a] -> [a] -> Int
lcs [] ys = 0
lcs xs [] = 0
lcs (x : xs) (y : ys) =
maximum
[ if x == y then 1 + lcs xs ys
else lcs xs ys
, lcs xs (y : ys)
, lcs (x : xs) ys
]
top-down: sehr viele rekursive Aufrufe ...
aber nicht viele verschiedene ...
Optimierung durch bottom-up-Reihenfolge!