int lcs_length(char * A, char * B) { allocate storage for array L; for (i = m; i >= 0; i--) for (j = n; j >= 0; j--) { if (A[i] == '\0' || B[j] == '\0') L[i,j] = 0; else if (A[i+1] == B[j+1]) L[i,j] = 1 + L[i+1, j+1]; else L[i,j] = max(L[i+1, j], L[i, j+1]); } return L[0,0]; }
Преимуществом этого метода является то, что итерация обычно быстрее рекурсии, нам не надо инициализовать матрицу -1'ми, и мы избавляемся от трех операторов if: нам не нужно проверять, были ли вычислены L[i,j], L[i+1,j] и L[i,j+1] ( очевидно, да, нет и нет ).
Недостаток - заполняется весь массив, хотя нам может быть необходима только его часть.
8 8 8
| |