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 palindrome_number;
 | 
				
			||||||
pub mod reverse_integer;
 | 
					pub mod reverse_integer;
 | 
				
			||||||
pub mod two_sum;
 | 
					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