rustgym/leetcode/
_320_generalized_abbreviation.rs1struct Solution;
2
3impl Solution {
4 fn generate_abbreviations(word: String) -> Vec<String> {
5 let n = word.len();
6 let word: Vec<char> = word.chars().collect();
7 let mut cur: String = "".to_string();
8 let mut res = vec![];
9 Self::dfs(0, 0, &mut cur, &mut res, &word, n);
10 res
11 }
12
13 fn dfs(
14 start: usize,
15 count: usize,
16 cur: &mut String,
17 all: &mut Vec<String>,
18 word: &[char],
19 n: usize,
20 ) {
21 let len = cur.len();
22 if start == n {
23 if count > 0 {
24 *cur += &count.to_string();
25 }
26 all.push((*cur).to_string());
27 } else {
28 Self::dfs(start + 1, count + 1, cur, all, word, n);
29 if count > 0 {
30 *cur += &count.to_string();
31 }
32 cur.push(word[start]);
33 Self::dfs(start + 1, 0, cur, all, word, n);
34 }
35 cur.truncate(len);
36 }
37}
38
39#[test]
40fn test() {
41 let word = "word".to_string();
42 let mut res = vec_string![
43 "word", "1ord", "w1rd", "wo1d", "wor1", "2rd", "w2d", "wo2", "1o1d", "1or1", "w1r1", "1o2",
44 "2r1", "3d", "w3", "4"
45 ];
46 let mut ans = Solution::generate_abbreviations(word);
47 res.sort();
48 ans.sort();
49 assert_eq!(ans, res);
50}