code: private static <T> List<T> lcs(List<T> arg0, List<T> arg1, Comparator<T> comparator, int i,
                                     int j) {
          if (arg0.size() == i || arg1.size() == j) {
              return new ArrayList<>(Math.min(arg0.size(), arg1.size()));
          }
  
          if (comparator.compare(arg0.get(i), arg1.get(j)) == 0) {
              T t = arg0.get(i);
              List<T> list = lcs(arg0, arg1, comparator, i + 1, j + 1);
              list.add(t);
              return list;
          } else {
              List<T> l1 = lcs(arg0, arg1, comparator, i + 1, j);
              List<T> l2 = lcs(arg0, arg1, comparator, i, j + 1);
              return l1.size() > l2.size() ? l1 : l2;
          }
      }
docs: 求最长公共子序列
  
  @param arg0       第一个序列
  @param arg1       第二个序列
  @param comparator 比较器
  @param i          第一个序列的当前位置指针
  @param j          第二个序列的当前位置指针
  @param <T>        数组中数据的实际类型
  @return 两个序列的公共子序列