Skip to main content
Back to problems
#804
Easy Algorithms

Unique morse code words

Array Hash Table String
83.6% acceptance
Feb 22, 2026
2611
1554
International Morse Code defines a standard encoding where each letter is mapped to a series of dots and dashes, as follows: 'a' maps to ".-", 'b' maps to "-...", 'c' maps to "-.-.", and so on. For convenience, the full table for the 26 letters of the English alphabet is given below: [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."] Given an array of strings words where each word can be written as a concatenation of the Morse code of each letter. For example, "cab" can be written as "-.-..--...", which is the concatenation of "-.-.", ".-", and "-...". We will call such a concatenation the transformation of a word. Return the number of different transformations among all words we have.

Solution

Rust
Time O(n)
Space O(1)
LeetCode
solution.rs
impl Solution {
  pub fn unique_morse_representations(words: Vec<String>) -> i32 {
    const MORSE: [&str; 26] = [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."];
    use std::collections::HashSet;
    let set: HashSet<String> = words.iter().map(|w| {
      w.chars().map(|c| MORSE[(c as u8 - b'a') as usize]).collect()
    }).collect();
    set.len() as i32

  }
}