An abbreviation of a word follows the form <first letter><number><last letter>. Below are some examples of word abbreviations:
a) it --
>
it (no abbreviation)
1
b) d|o|g --
>
d1g
1 1 1
1---5----0----5--8
c) i|nternationalizatio|n --
>
i18n
1
1---5----0
d) l|ocalizatio|n --
>
l10n
Assume you have a dictionary and given a word, find whether its abbreviation is unique in the dictionary. A word's abbreviation is unique if nootherword from the dictionary has the same abbreviation.
Simple map abr -> word, and then follow some boolean logic to check if it the abbreviation of a given string exists in the given dictionary.
classValidWordAbbr {public:ValidWordAbbr(vector<string> &dictionary) {for (string s : dictionary) { string temp =*s.begin() +to_string(s.length() -2) +*s.rbegin(); // foundif (abr_words.find(temp) !=abr_words.end()) {abr_words[temp].insert(s); } // not foundelse { unordered_set<string> temp_set;temp_set.insert(s);abr_words.insert(make_pair(temp, temp_set)); } } }boolisUnique(string word) { // A word's abbreviation is unique if no other word from the dictionary // has the same abbreviation. string temp =*word.begin() +to_string(word.length() -2) +*word.rbegin(); // no other word has the same abbreviationif (abr_words.find(temp) ==abr_words.end()) returntrue; // other word has the same abbreviationelseif (abr_words.find(temp) !=abr_words.end()&&abr_words[temp].find(word) !=abr_words[temp].end()&&abr_words[temp].size() ==1) returntrue;returnfalse; }private: // < abr , word > unordered_map<string, unordered_set<string>> abr_words;};