Morse code is a method used in telecommunication to encode text characters as standardized sequences of two different signal durations, called dots and dashes. 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:
Table:
[".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---", ".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."]
1. To convert the given English letter to Morse Code and vice versa using iteration
Example:
Input: geeks Output: --. . . -.- ... Explanation: Here each letter in string is converted into morse code given at Table like for g letter morse code is "--." ,e=".",e=".",k="-.-",s="..." Input: school Output: ... -.-. .... --- --- .-..
Approach:
- Store all the alphabet in an array named in this code is letter[] same here store all the alphabet in another array named code[].
- Convert the input string to char array str[].
- Iteratively match the character position with a letter in the letter array.
- Find its character position in that letter[] array and using that position returns the character present at that position from the code[] array.
- Iteratively find all Morse Code for all character in an input string and vice versa.
Below is the implementation of the above approach.
Java
// Java Program to Convert English // Text to Morse Code and Vice Versa import java.util.*; public class Main { public static void morseToEnglish(String[] code, String morseCode) { String[] array = morseCode.split( " " ); System.out.print( "Morse code " + morseCode + " to English is " ); // Morse code to English for ( int i = 0 ; i < array.length; i++) { for ( int j = 0 ; j < code.length; j++) { if (array[i].compareTo(code[j]) == 0 ) { System.out.print(( char )(j + 'a' ) + " " ); break ; } } } } public static void englishToMorse(String[] code, String englishLang, char [] letter) { System.out.print( "Morse code of " + englishLang + " is " ); for ( int i = 0 ; i < englishLang.length(); i++) { for ( int j = 0 ; j < letter.length; j++) { if (englishLang.charAt(i) == letter[j]) { System.out.print(code[j] + " " ); break ; } } } } public static void main(String[] args) { // store the all the alphabet in an array char [] letter = { 'a' , 'b' , 'c' , 'd' , 'e' , 'f' , 'g' , 'h' , 'i' , 'j' , 'k' , 'l' , 'm' , 'n' , 'o' , 'p' , 'q' , 'r' , 's' , 't' , 'u' , 'v' , 'w' , 'x' , 'y' , 'z' , '1' , '2' , '3' , '4' , '5' , '6' , '7' , '8' , '9' , '0' }; // Morse code by indexing String[] code = { ".-" , "-..." , "-.-." , "-.." , "." , "..-." , "--." , "...." , ".." , ".---" , "-.-" , ".-.." , "--" , "-." , "---" , ".--." , "--.-" , ".-." , "..." , "-" , "..-" , "...-" , ".--" , "-..-" , "-.--" , "--.." , "|" }; // Given Strings String morseCode = "... -.-. .... --- --- .-.." ; String englishLang = "alice" ; // morse to English morseToEnglish(code, morseCode); System.out.println(); // English to morse code englishToMorse(code, englishLang, letter); } } |
Morse code ... -.-. .... --- --- .-.. to English is s c h o o l Morse code of alice is .- .-.. .. -.-. .
- Time Complexity: O(n2)
- Space Complexity: O(1)
2. Conversion using HashMap
Example:
Input: ... -.-. .... --- --- .-.. Output: school Explanation: Just reverse the step of previous one "..."=>s, "-.-"=>c, "...."=>h, "---"=>o, "---"=>o, ".-.."=> l Input: --. . . -.- ... Output: geeks
Approach:
A. Morse Code to English.
- Create two maps for Morse code to English conversion.
- Push all the Morse code and respective alphabets in the map.
- Start traversing Morse code string and display its respective English alphabet.
B. English to Morse Code.
- Store Morse code in the array.
- Start traversing string of English sentences.
- Use expression englishCharacter-‘a’ to get an index of Morse code.
Below is an implementation of the above approach
Java
// Java Program to Convert English // Text to Morse Code and Vice Versa import java.util.*; public class Main { public static void morseToEnglish(String[] code, String morseCode) { // morse code to English Hashmap Map<String, Character> morseToEnglish = new HashMap<>(); // Map value allocation for ( int i = 0 ; i < 26 ; i++) { morseToEnglish.put(code[i], ( char )( 'a' + i)); } // Split morse code in array of string String[] array = morseCode.split( " " ); System.out.print( "Morse code " + morseCode + " to English is " ); // Morse code to English for ( int i = 0 ; i < array.length; i++) { System.out.print(morseToEnglish.get(array[i]) + " " ); } } public static void englishToMorse(String[] code, String englishLang) { for ( int i = 0 ; i < englishLang.length(); i++) { System.out.print( code[englishLang.charAt(i) - 'a' ] + " " ); } } public static void main(String[] args) { // Morse code by indexing String[] code = { ".-" , "-..." , "-.-." , "-.." , "." , "..-." , "--." , "...." , ".." , ".---" , "-.-" , ".-.." , "--" , "-." , "---" , ".--." , "--.-" , ".-." , "..." , "-" , "..-" , "...-" , ".--" , "-..-" , "-.--" , "--.." , "|" }; // Given Strings String morseCode = "... -.-. .... --- --- .-.." ; String englishLang = "alice" ; // morse to English morseToEnglish(code, morseCode); System.out.println(); // English to morse code englishToMorse(code, englishLang); } } |
Morse code ... -.-. .... --- --- .-.. to English is s c h o o l .- .-.. .. -.-. .
- Time Complexity: O(n)
- Space Complexity: O(n)