pub fn longest_common_subsequence(text1: String, text2: String) -> i32 {
let (text1, text2) = (text1.as_bytes(), text2.as_bytes());
let (l1, l2) = (text1.len(), text2.len());
let mut matrix = vec![vec![0; l2 + 1]; l1 + 1];
for i in (0..l1).rev() {
for j in (0..l2).rev() {
matrix[i][j] = if text1[i] == text2[j] {
1 + matrix[i + 1][j + 1]
} else {
matrix[i][j + 1].max(matrix[i + 1][j])
};
}
}
matrix[0][0]
}