Longest Common Sub-sequence Algorithm