rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::HashMap;

impl Solution {
    fn words_abbreviation(dict: Vec<String>) -> Vec<String> {
        let mut count: HashMap<(&str, &str, usize), usize> = HashMap::new();
        for s in &dict {
            let n = s.len();
            let suffix = &s[n - 1..];
            for i in 1..n {
                let prefix = &s[..i];
                let k = n - i - 1;
                *count.entry((prefix, suffix, k)).or_default() += 1;
            }
        }
        let mut res = vec![];
        for s in &dict {
            let n = s.len();
            let suffix = &s[n - 1..];
            for i in 1..n {
                let prefix = &s[..i];
                let k = n - i - 1;
                if let Some(1) = count.get(&(prefix, suffix, k)) {
                    if k <= 1 {
                        res.push(s.to_string());
                    } else {
                        res.push(format!("{}{}{}", prefix, k, suffix));
                    }
                    break;
                }
            }
        }
        res
    }
}

#[test]
fn test() {
    let dict = vec_string![
        "like",
        "god",
        "internal",
        "me",
        "internet",
        "interval",
        "intension",
        "face",
        "intrusion"
    ];
    let res =
        vec_string!["l2e", "god", "internal", "me", "i6t", "interval", "inte4n", "f2e", "intr4n"];
    assert_eq!(Solution::words_abbreviation(dict), res);
}