use crate::ops::string_similarity::validation::{to_u32, validate_dp_product, validate_pair, SimilarityError};
pub fn lcs_length(a: &[u8], b: &[u8]) -> Result<u32, SimilarityError> {
validate_pair(a, b)?;
validate_dp_product(a.len(), b.len())?;
let mut previous = vec![0usize; b.len() + 1];
let mut current = vec![0usize; b.len() + 1];
for &left in a {
for (j, &right) in b.iter().enumerate() {
current[j + 1] = if left == right {
previous[j] + 1
} else {
previous[j + 1].max(current[j])
};
}
std::mem::swap(&mut previous, &mut current);
current.fill(0);
}
to_u32(previous[b.len()], "lcs length")
}