Solve longest-common-prefix.
This commit is contained in:
parent
c8390c584f
commit
3882005994
|
@ -1,3 +1,4 @@
|
|||
pub mod longest_common_prefix;
|
||||
pub mod palindrome_number;
|
||||
pub mod reverse_integer;
|
||||
pub mod two_sum;
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
pub fn longest_common_prefix(strings: Vec<String>) -> String {
|
||||
// Sort the strings ascending by length.
|
||||
let mut strings = strings.clone();
|
||||
strings.sort_by(|a, b| a.len().cmp(&b.len()));
|
||||
|
||||
// Then grab the shortest string.
|
||||
let shortest_string = match strings.first() {
|
||||
Some(string) => string,
|
||||
None => return String::new(),
|
||||
};
|
||||
|
||||
// The shortest string must be the maximum possible prefix, so start with it.
|
||||
let mut prefix = shortest_string.clone();
|
||||
|
||||
// Then loop over the shortest string's length and check if every string in
|
||||
// the list starts with the prefix, and if they don't, pop the last character
|
||||
// from the prefix.
|
||||
for _ in 0..shortest_string.len() {
|
||||
// If we find a prefix that all strings start with, we've found the longest
|
||||
// common one.
|
||||
if strings.iter().all(|string| string.starts_with(&prefix)) {
|
||||
break;
|
||||
} else {
|
||||
prefix.pop();
|
||||
}
|
||||
}
|
||||
|
||||
// If by the end there is no longest common prefix, the prefix will be an
|
||||
// empty string.
|
||||
prefix
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn test_longest_common_prefix() {
|
||||
assert_eq!(
|
||||
longest_common_prefix(vec![
|
||||
"doggo".to_string(),
|
||||
"doggie".to_string(),
|
||||
"dog".to_string(),
|
||||
]),
|
||||
"dog"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
longest_common_prefix(vec![
|
||||
"flower".to_string(),
|
||||
"flow".to_string(),
|
||||
"flight".to_string(),
|
||||
]),
|
||||
"fl"
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
longest_common_prefix(vec![
|
||||
"dog".to_string(),
|
||||
"racecar".to_string(),
|
||||
"car".to_string(),
|
||||
]),
|
||||
""
|
||||
);
|
||||
|
||||
assert_eq!(
|
||||
longest_common_prefix(vec![
|
||||
"dog".to_string(),
|
||||
"racecar".to_string(),
|
||||
"car".to_string(),
|
||||
"".to_string()
|
||||
]),
|
||||
""
|
||||
);
|
||||
}
|
Loading…
Reference in New Issue