Client/src/main.rs

61 lines
1.2 KiB
Rust
Raw Normal View History

2023-05-31 22:31:49 -04:00
use crate::lcs::diff;
2023-05-28 21:43:20 -04:00
mod matrix;
2023-05-31 22:31:49 -04:00
mod lcs;
2023-05-28 21:43:20 -04:00
2023-05-31 22:31:49 -04:00
fn main() {
2023-06-04 20:26:40 -04:00
let a = "abcd";
let b = "abce";
2023-05-28 21:43:20 -04:00
2023-06-04 20:26:40 -04:00
// diff(a, b);
lcs(a, b);
2023-05-27 11:27:49 -04:00
}
2023-05-31 22:31:49 -04:00
2023-06-04 20:26:40 -04:00
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);
}