How to group Anagrams from a vector of strings in Rust

1 Answer

0 votes
use std::collections::HashMap;

fn group_anagrams(words: Vec<&str>) -> Vec<Vec<String>> {
    let mut anagram_map: HashMap<String, Vec<String>> = HashMap::new();

    for &word in &words {
        let mut sorted_chars: Vec<char> = word.chars().collect();
        sorted_chars.sort_unstable(); // Sort characters in the string
        let sorted_str: String = sorted_chars.into_iter().collect();

        anagram_map.entry(sorted_str).or_insert(Vec::new()).push(word.to_string());
    }

    anagram_map.into_values().collect()
}

fn main() {
    let input_words = vec!["eat", "tea", "tan", "ate", "nat", "bat", "tae"];
    let grouped_anagrams = group_anagrams(input_words);

    for group in grouped_anagrams {
        println!("{}", group.join(" "));
    }
}

   
    
/*
run:
    
tan nat
eat tea ate tae
bat
    
*/

 



answered Jun 10, 2025 by avibootz
...