s1@(Sequence traits) longestCommonSubsequenceWith: s2@(Sequence traits) [ s1 isEmpty \/ s2 isEmpty ifTrue: [^ {}]. s1 last = s2 last ifTrue: [(s1 allButLast longestCommonSubsequenceWith: s2 allButLast) copyWith: s1 last] ifFalse: [| x y | x: (s1 longestCommonSubsequenceWith: s2 allButLast). y: (s1 allButLast longestCommonSubsequenceWith: s2). x length > y length ifTrue: [x] ifFalse: [y]] ].