rustgym 0.2.0

rustgym solutions
Documentation
struct Solution;

use std::collections::HashMap;
use std::collections::HashSet;

impl Solution {
    fn most_common_word(paragraph: String, banned: Vec<String>) -> String {
        let p: String = paragraph
            .chars()
            .map(|c| {
                if c.is_alphabetic() {
                    c.to_ascii_lowercase()
                } else {
                    ' '
                }
            })
            .collect();
        let mut hm: HashMap<String, usize> = HashMap::new();
        for word in p.split_whitespace() {
            let e = hm.entry(word.to_string()).or_default();
            *e += 1;
        }
        let mut max = 0;
        let mut res = "".to_string();
        let banned: HashSet<String> = banned.into_iter().collect();
        for word in p.split_whitespace() {
            if !banned.contains(word) {
                if let Some(&count) = hm.get(word) {
                    if count > max {
                        max = count;
                        res = word.to_string();
                    }
                }
            }
        }
        res
    }
}

#[test]
fn test() {
    let paragraph: String = "Bob hit a ball, the hit BALL flew far after it was hit.".to_string();
    let banned: Vec<String> = vec_string!["hit"];
    assert_eq!(
        Solution::most_common_word(paragraph, banned),
        "ball".to_string()
    );
    let paragraph: String = "a".to_string();
    let banned: Vec<String> = vec![];
    assert_eq!(
        Solution::most_common_word(paragraph, banned),
        "a".to_string()
    );
}