rustgym/leetcode/
_524_longest_word_in_dictionary_through_deleting.rs

1struct Solution;
2
3use std::cmp::Reverse;
4use std::collections::BinaryHeap;
5
6impl Solution {
7    fn find_longest_word(s: String, d: Vec<String>) -> String {
8        let s: Vec<char> = s.chars().collect();
9        let mut queue: BinaryHeap<(usize, Reverse<String>)> =
10            d.into_iter().map(|s| (s.len(), Reverse(s))).collect();
11        while let Some((_, r)) = queue.pop() {
12            let mut it = r.0.chars().peekable();
13            for i in 0..s.len() {
14                if let Some(&c) = it.peek() {
15                    if c == s[i] {
16                        it.next();
17                    }
18                } else {
19                    break;
20                }
21            }
22            if it.next().is_none() {
23                return r.0;
24            }
25        }
26        "".to_string()
27    }
28}
29
30#[test]
31fn test() {
32    let s = "abpcplea".to_string();
33    let d = vec_string!["ale", "apple", "monkey", "plea"];
34    let res = "apple".to_string();
35    assert_eq!(Solution::find_longest_word(s, d), res);
36    let s = "abpcplea".to_string();
37    let d = vec_string!["a", "b", "c"];
38    let res = "a".to_string();
39    assert_eq!(Solution::find_longest_word(s, d), res);
40}