rustgym/leetcode/
_524_longest_word_in_dictionary_through_deleting.rs1struct 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}