Search

Short Encoding of Words

Updated: Mar 24, 2021

A valid encoding of an array of words is any reference string s and array of indices indices such that:

  • words.length == indices.length

  • The reference string s ends with the '#' character.

  • For each index indices[i], the substring of s starting from indices[i] and up to (but not including) the next '#' character is equal to words[i].

Given an array of words, return the length of the shortest reference string s possible of any valid encoding of words.


Example 1:

Input: words = ["time", "me", "bell"]
Output: 10
Explanation: A valid encoding would be s = "time#bell#" and indices = [0, 2, 5].
words[0] = "time", the substring of s starting from indices[0] = 0 to the next '#' is underlined in "time#bell#"
words[1] = "me", the substring of s starting from indices[1] = 2 to the next '#' is underlined in "time#bell#"
words[2] = "bell", the substring of s starting from indices[2] = 5 to the next '#' is underlined in "time#bell#"

Example 2:

Input: words = ["t"]
Output: 2
Explanation: A valid encoding would be s = "t#" and indices = [0].


Constraints:

  • 1 <= words.length <= 2000

  • 1 <= words[i].length <= 7

  • words[i] consists of only lowercase letters.


Solution:

class Solution {
    public int minimumLengthEncoding(String[] words) {
       Set<String> set=new HashSet(Arrays.asList(words));
        for(String word:words)
        {
            for(int i=1;i<word.length();i++)
            {
                set.remove(word.substring(i));
            }
        }
        int result =0;
        for(String word:set)
        {
            result+=word.length()+1;
        }
        return result;
    }
}

28 views0 comments

Recent Posts

See All

A string s is called good if there are no two different characters in s that have the same frequency. Given a string s, return the minimum number of characters you need to delete to make s good. The f

The numeric value of a lowercase character is defined as its position (1-indexed) in the alphabet, so the numeric value of a is 1, the numeric value of b is 2, the numeric value of c is 3, and so on.