Поскольку у вас есть уникальные элементы, ответ @Nikita Rybak - один из них, но поскольку вы упомянули динамическое программирование, вот как вы будете использовать DP, если у вас более двух последовательностей:
dp[i, j, k] = length of longest common subsequence considering the prefixes
a[1..i], b[1..j], c[1..k].
dp[i, j, k] = 1 + dp[i - 1, j - 1, k - 1] if a[i] = b[j] = c[k]
= max(dp[i - 1, j, k], dp[i, j - 1, k], dp[i, j, k - 1]) otherwise
Чтобы вернуть фактическую подпоследовательность, используйте рекурсивную функцию, которая начинается с dp[a.Length, b.Length, c.Length]
и в основном обращает вышеуказанные формулы: если три элемента равны, вернитесь к dp[a.Length - 1, b.Length - 1, c.Length - 1]
и напечатайте символ.Если нет, вернитесь назад в соответствии с максимальным значением из вышеуказанных значений.