fn at_least_half_equal(s1: &str, s2: &str) -> bool {
// Check equal length and non-empty
if s1.len() == 0 || s1.len() != s2.len() {
return false;
}
let mut matches = 0;
// Compare byte-by-byte (Pascal strings are byte-indexed too)
for i in 0..s1.len() {
if s1.as_bytes()[i] == s2.as_bytes()[i] {
matches += 1;
}
}
// matches / len >= 0.5 → 2 * matches >= len
matches * 2 >= s1.len()
}
fn main() {
println!("{}", at_least_half_equal("abcde", "axcfz"));
println!(
"{}",
at_least_half_equal(
"javascript c# c++ c python",
"javascript c# r c rust sql"
)
);
}
/*
run:
false
true
*/