use crate::lcs::diff; mod matrix; mod lcs; fn main() { let a = "abcd"; let b = "abce"; // diff(a, b); lcs(a, b); } fn lcs(a: &str, b: &str) { let n = a.len(); let m = b.len(); let max = (n + m) / 2; let mut v = vec![0usize; max * 2]; for d in 0..max { let mut k = 0usize; while k <= d * 2 { let mut x = if k == 0 || k != d * 2 && v[k - 1] < v[k + 1] { v[k + 1] } else { v[k - 1] + 1 }; let mut y = if k < x { x - k } else { 0 }; while x < n && y < m { let ac = a.chars().nth(x + 1).unwrap(); let bc = b.chars().nth(y + 1).unwrap(); if ac != bc { break; } x = x + 1; y = y + 1; } v[k] = x; if x >= n && y >= m { println!("Length of a SES is D ({d})"); dbg!(v); return; } k += 2; } } println!("Length of a SES is greater than MAX ({max})"); dbg!(v); }