/* * @lc app=leetcode id=804 lang=rust * * [804] Unique Morse Code Words * * https://leetcode.com/problems/unique-morse-code-words/description/ * * algorithms * Easy (76.04%) * Total Accepted: 124.9K * Total Submissions: 164.2K * Testcase Example: '["gin", "zen", "gig", "msg"]' * * 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: * * * * [".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."] * * Now, given a list of words, each word can be written as a concatenation of * the Morse code of each letter. For example, "cba" can be written as * "-.-..--...", (which is the concatenation "-.-." + "-..." + ".-"). We'll * call such a concatenation, the transformation of a word. * * Return the number of different transformations among all words we have. * * * Example: * Input: words = ["gin", "zen", "gig", "msg"] * Output: 2 * Explanation: * The transformation of each word is: * "gin" -> "--...-." * "zen" -> "--...-." * "gig" -> "--...--." * "msg" -> "--...--." * * There are 2 different transformations, "--...-." and "--...--.". * * * Note: * * * The length of words will be at most 100. * Each words[i] will have length in range [1, 12]. * words[i] will only consist of lowercase letters. * * */ use std::collections::HashSet; use std::iter::FromIterator; impl Solution { pub fn unique_morse_representations(words: Vec) -> i32 { let mos = vec![".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]; HashSet::::from_iter(words.iter().map(|w| w.chars().map(|c| mos[(c as usize) - ('a' as usize)]).collect::())).len() as i32 } } // pub structSolution;