fn merge_on_overlap(a: &str, b: &str) -> String {
let len_a = a.len();
let len_b = b.len();
let max_possible_overlap_len = len_a.min(len_b);
let mut overlap = 0;
for len in (1..=max_possible_overlap_len).rev() {
if &a[len_a - len..] == &b[..len] {
overlap = len;
break;
}
}
let mut result = String::with_capacity(len_a + len_b - overlap);
result.push_str(a);
result.push_str(&b[overlap..]);
result
}
fn main() {
let a = "fantasy time travel technology";
let b = "technology extraterrestrial life";
println!("{}", merge_on_overlap(a, b));
}
/*
run:
fantasy time travel technology extraterrestrial life
*/