leetcode_rust/
minimum_index_sum_of_two_lists.rs

1#![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}