Leetcode Longest Common Subsequence Dynamic Programming Knapsack