RosettaCodeData/Task/Longest-common-substring/Haskell/longest-common-substring-1.hs

17 lines
444 B
Haskell

import Data.Ord (comparing)
import Data.List (maximumBy, intersect)
subStrings :: [a] -> [[a]]
subStrings s =
let intChars = length s
in [ take n $ drop i s
| i <- [0 .. intChars - 1]
, n <- [1 .. intChars - i] ]
longestCommon :: Eq a => [a] -> [a] -> [a]
longestCommon a b =
maximumBy (comparing length) (subStrings a `intersect` subStrings b)
main :: IO ()
main = putStrLn $ longestCommon "testing123testing" "thisisatest"