rustgym/leetcode/
_320_generalized_abbreviation.rs

1struct 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}