一个给定序列的子序列是在该序列中删去若干元素后得到的序列。确切地说,若给定序列 $X=x_1x_2\ldots x_m$,则另一序列 $Z=z_1z_2\ldots z_k$ 是 $X$ 的子序列是指存在一个严格递增下标序列 $i_1,i_2, \ldots ,i_k$ 使得对于所有 $j=1,2,…,k$ 有 $z_j=x_{i_j}$。
例如,序列 $Z=\texttt{GACT}$ 是序列 $X=\texttt{GCTACT}$ 的子序列,相应的递增下标序列为 $1,4,5,6$。给定两个序列 $X$ 和 $Y$,当另一序列 $Z$ 既是 $X$ 的子序列又是 $Y$ 的子序列时,称 $Z$ 是序列 $X$ 和 $Y$ 的公共子序列。例如,若 $X=\texttt{GCTACT}$, $Y=\texttt{GATCCT}$,序列 $\texttt{TT}$ 是 $X$ 和 $Y$ 的一个公共子序列,序列 $\texttt{GACT}$ 也是 $X$ 和 $Y$ 的一个公共子序列。注意对于任何给定的序列 $X$ 和 $Y$,空序列总是它们的一个公共子序列。
所有公共子序列问题是要求对于给定的2个序列 $X=x_1x_2\ldots x_m$ 和 $Y=y_1y_2\ldots y_m$ ,找出 $X$ 和 $Y$ 的所有不同的公共子序列。