Created
September 15, 2018 13:56
-
-
Save Pzixel/ec81eafaabc74acf32ed53cb85c97bca to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
fn are_concatable_strings(a: &str, b: &str, result: &str) -> bool { | |
if a.len() + b.len() != result.len() { | |
return false; | |
} | |
let a: Vec<_> = a.chars().collect(); | |
let b: Vec<_> = b.chars().collect(); | |
let result: Vec<_> = result.chars().collect(); | |
let mut i = 0; | |
let mut j = 0; | |
let mut k = 0; | |
let mut match_len = 0; | |
while k < result.len() { | |
let ai = a.get(i); | |
let bj = b.get(j); | |
let ref rk = result[k]; | |
if ai == Some(rk) && bj == Some(rk) { | |
match_len += 1; | |
i += 1; | |
j += 1; | |
k += 1; | |
} else if ai == Some(rk) { | |
i += 1; | |
j -= match_len; | |
match_len = 0; | |
k += 1; | |
} else if bj == Some(rk) { | |
j += 1; | |
i -= match_len; | |
match_len = 0; | |
k += 1; | |
} else if ai == None && bj == None || match_len != 0 { | |
j -= match_len; | |
match_len = 0; | |
} else { | |
return false; | |
} | |
} | |
true | |
} | |
#[cfg(test)] | |
mod tests { | |
use super::*; | |
macro_rules! generate_test { | |
($name:ident, $c:expr, $a:expr, $b:expr, $result:expr) => { | |
#[test] | |
fn $name() { | |
assert_eq!(are_concatable_strings($a, $b, $c), $result); | |
} | |
} | |
} | |
generate_test!(a, "javascript", "javpt", "ascri", true); | |
generate_test!(b, "javascript", "jasrit", "vacp", true); | |
generate_test!(c, "javascript", "java", "scripts", false); | |
generate_test!(d, "javascript", "jav", "script", false); | |
generate_test!(e, "java not script", "java ", "not script", true); | |
generate_test!(f, "javascript", "java ", "scritp", false); | |
generate_test!(g, "Java1Java3Java2Java4", "Java2Java4", "Java1Java3", true); | |
generate_test!(h, "jjaaamaaat", "jaaam", "jaaat", true); | |
generate_test!(m, "jjbaaamqtba", "jaaam", "jbqtba", true); | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment