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 most 100. - Each words[i] will have length in range [1, 12]. - words[i] will only consist of lowercase letters. My approach: import java.util.*; class Solution { public int uniqueMorseRepresentations(String[] words) { HashMap<String,String> morseMap = new HashMap<>(26); String [] morseWords = new String[] {".-","-...","-.-.","-..",".","..-.","--.","....","..",".---","-.-",".-..","--","-.","---",".--.","--.-",".-.","...","-","..-","...-",".--","-..-","-.--","--.."}; HashSet<String> uniqCode = new HashSet<>(); String morse = ""; int ind; for( int i = 0; i < words.length; i++ ) { morse = ""; for( int j = 0; j < words[i].length(); j++ ) { ind = ((int)words[i].charAt(j)) - 97; morse += morseWords[ind]; } uniqCode.add(morse); } return uniqCode.size(); } } A 2nd approach using Java Stream: public int uniqueMorseRepresentations(String[] words) { Set<String> res = Arrays.stream(words).map(i -> getMC(i)).collect(Collectors.toSet()); return res.size(); } private String getMC(String str) { String[] mCode = {".-","-...","-.-.","-..",".","..-.","--.","....","..", ".---","-.-",".-..","--","-.","---",".--.","--.-",".-.", "...","-","..-","...-",".--","-..-","-.--","--.."}; return str.chars().mapToObj(ch -> mCode[(char)ch % 97]).reduce("", String::concat); } With regards to the above code snippets, I have the following questions: 1) Which approach is better according to an interviewer? 2) What can be improved in the 1st approach? 3) Does the 2nd approach sacrifice readability for succintness? 4) Is there a better method, eg StringBuilder in place of string that can speed up the solution of the first approach? [Reference](https://leetcode.com/problems/unique-morse-code-words/description/)