Back to all solutions
#288 - Unique Word Abbreviation
Problem Description
The abbreviation of a word is a concatenation of its first letter, the number of characters between the first and last letter, and its last letter. If a word has only two characters, then it is an abbreviation of itself.
For example:
- dog --> d1g because there is one letter between the first letter 'd' and the last letter 'g'.
- internationalization --> i18n because there are 18 letters between the first letter 'i' and the last letter 'n'.
- it --> it because any word with only two characters is an abbreviation of itself.
Implement the ValidWordAbbr class:
- ValidWordAbbr(String[] dictionary) Initializes the object with a dictionary of words.
- boolean isUnique(string word) Returns true if either of the following conditions are met (otherwise returns false):
- There is no word in dictionary whose abbreviation is equal to word's abbreviation.
- For any word in dictionary whose abbreviation is equal to word's abbreviation, that word and word are the same.
Solution
/**
* @param {string[]} dictionary
*/
var ValidWordAbbr = function(dictionary) {
this.abbrMap = new Map();
for (const word of dictionary) {
const abbr = this.getAbbreviation(word);
if (!this.abbrMap.has(abbr)) {
this.abbrMap.set(abbr, new Set());
}
this.abbrMap.get(abbr).add(word);
}
};
/**
* @param {string} word
* @return {string}
*/
ValidWordAbbr.prototype.getAbbreviation = function(word) {
if (word.length <= 2) return word;
return word[0] + (word.length - 2) + word[word.length - 1];
};
/**
* @param {string} word
* @return {boolean}
*/
ValidWordAbbr.prototype.isUnique = function(word) {
const abbr = this.getAbbreviation(word);
const words = this.abbrMap.get(abbr);
return !words || (words.size === 1 && words.has(word));
};