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/)