804. Unique Morse Code Words
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, "cab" 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 most100
. - Each
words[i]
will have length in range[1, 12]
. words[i]
will only consist of lowercase letters.
Rust Solution
struct Solution;
use std::collections::HashSet;
impl Solution {
fn unique_morse_representations(words: Vec<String>) -> i32 {
let map = [
".-", "-...", "-.-.", "-..", ".", "..-.", "--.", "....", "..", ".---", "-.-", ".-..",
"--", "-.", "---", ".--.", "--.-", ".-.", "...", "-", "..-", "...-", ".--", "-..-",
"-.--", "--..",
];
let mut morse: HashSet<String> = HashSet::new();
for w in words {
let mut s: String = "".to_string();
for c in w.chars() {
let m = map[(c as u8 - b'a') as usize];
s += m;
}
morse.insert(s);
}
morse.len() as i32
}
}
#[test]
fn test() {
let words: Vec<String> = vec_string!["gin", "zen", "gig", "msg"];
assert_eq!(Solution::unique_morse_representations(words), 2);
}
Having problems with this solution? Click here to submit an issue on github.