leetcode_rust/
minimum_index_sum_of_two_lists.rs1#![allow(dead_code)]
2
3pub fn find_restaurant(list1: Vec<String>, list2: Vec<String>) -> Vec<String> {
4 use std::collections::HashMap;
5
6 let mut map = HashMap::new();
7 let mut min = 2000;
8 let mut res = vec![];
9 for (i, x) in list1.into_iter().enumerate() {
10 map.insert(x, i);
11 }
12 for (i, x) in list2.into_iter().enumerate() {
13 match map.get_mut(&x) {
14 Some(v) => {
15 if *v + i < min {
16 min = *v + i;
17 res.clear();
18 res.push(x);
19 } else if *v + i == min {
20 res.push(x);
21 }
22 }
23 None => {}
24 }
25 }
26 res
27}
28
29#[cfg(test)]
30mod tests {
31 use super::*;
32
33 #[test]
34 fn test1() {
35 let list1 = vec!["Shogun", "Tapioca Express", "Burger King", "KFC"];
36 let list1: Vec<String> = list1.into_iter().map(|x| x.to_string()).collect();
37 let list2 = vec![
38 "Piatti",
39 "The Grill at Torrey Pines",
40 "Hungry Hunter Steakhouse",
41 "Shogun",
42 ];
43 let list2: Vec<String> = list2.into_iter().map(|x| x.to_string()).collect();
44 assert_eq!(find_restaurant(list1, list2), vec!["Shogun"]);
45
46 let list1 = vec!["Shogun", "Tapioca Express", "Burger King", "KFC"];
47 let list1: Vec<String> = list1.into_iter().map(|x| x.to_string()).collect();
48 let list2 = vec!["KFC", "Shogun", "Burger King"];
49 let list2: Vec<String> = list2.into_iter().map(|x| x.to_string()).collect();
50 assert_eq!(find_restaurant(list1, list2), vec!["Shogun"]);
51 }
52}