8.ユニークなモールス信号の単語
8.1.タイトル要件
国際モールス暗号は、各文字を一連のドットとダッシュで構成される文字列にマッピングする標準のエンコーディングを定義します。たとえば、次のようになります。
「a」は「.-」に対応し、
「b」は「-…」に
対応し、「c」は「-.-。」に対応します。
便宜上、26文字すべてのモールス信号表は次のとおりです。
[".-"、 "-..."、"-.-。"、 "-..."、"。"、 "...-。"、 "–。"、 "..."、 "..."、 ".-"、 "-.-"、".-…"、 "–"、"-。"、 "—"、 ".–。"、 "–.-"、"。 -。"、"… "、"-"、"…-"、"…-"、" .– "、"-…-"、" -.– "、" –…"]
は文字列配列を提供します単語、各単語はそれぞれとして書くことができます文字はモールス信号の組み合わせに対応しています。
たとえば、「cab」は「-.-…–…」と書くことができます(つまり、「-.-。」+「.-」+「-…」文字列の組み合わせ)。このような接続プロセスを単語翻訳と呼びます。
単語内のすべての単語に対して単語翻訳を実行し、異なる単語翻訳の数を返します。
示例 1:
输入: words = ["gin", "zen", "gig", "msg"]
输出: 2
解释:
各单词翻译如下:
"gin" -> "--...-."
"zen" -> "--...-."
"gig" -> "--...--."
"msg" -> "--...--."
共有 2 种不同翻译, "--...-." 和 "--...--.".
示例 2:
输入:words = ["a"]
输出:1
提示:
1 <= words.length <= 100
1 <= words[i].length <= 12
words[i] 由小写英文字母组成
ソース:LeetCode
リンク:https ://leetcode-cn.com/problems/unique-morse-code-words
8.2。問題解決のアイデア
最初にモールス暗号辞書を定義し、次に文字列配列内の各単語を取り出して順番にループし、各単語の各文字を変換してからスプライシングし、次にスプライシングしますモールス暗号それをHashSetに保存します(現時点では、 HashSetの一意性を使用すると、1つのタイプのみがHashSetに一度に格納されるため、HashSet内の要素の重複はありません)、最後にHashSetのサイズを返します。
8.3。アルゴリズム
class Solution {
public int uniqueMorseRepresentations(String[] words) {
//先定义一个摩尔斯密码字典
String[] MORSE = {
".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."};
Set<String> set = new HashSet<>();
//将字符串数组中的每个单词取出来并依次进行循环
for(String word : words){
//使用StringBuilder将转换的密码储存起来
StringBuilder sb = new StringBuilder();
//使用每个单词的长度进行循环
for(int i = 0;i < word.length();i++){
//将每个单词中的每个字母取出来
char c = word.charAt(i);
//将每个单词转换成摩尔斯密码并进行拼接
//MORSE[c - 'a']将每个单词进行转换
//code.append()将转换的单词进行拼接
sb.append(MORSE[c - 'a']);
}
//将转换后的结果存入到HashSet中,这里我们使用到了HashSet的唯一性
//因为HashSet中的值是唯一的,所以重复的类型会被去掉
set.add(sb.toString());
}
//最后,我们只需要返回HashSet的大小即可
return set.size();
}
}