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