pub fn longest_common_prefix(strs: &[&str]) -> String {
if strs.is_empty() { return String::new(); }
let mut prefix = strs[0];
for s in &strs[1..] {
let mut i = 0;
let min_len = prefix.chars().count().min(s.chars().count());
let prefix_chars: Vec<_> = prefix.chars().collect();
let s_chars: Vec<_> = s.chars().collect();
while i < min_len && prefix_chars[i] == s_chars[i] {
i += 1;
}
prefix = &prefix[..prefix_chars[..i].iter().map(|c| c.len_utf8()).sum::<usize>()];
if prefix.is_empty() { break; }
}
prefix.to_string()
}