题目描述:
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 no other word from the dictionary has the same abbreviation.
Example:
Given dictionary = [ "deer", "door", "cake", "card" ]
isUnique("dear") -> false
isUnique("cart") -> true
isUnique("cane") -> false
isUnique("make") -> true
class ValidWordAbbr {
public:
ValidWordAbbr(vector<string>& dictionary) {
for(string& s:dictionary) dict[abbreviation(s)].insert(s);
}
bool isUnique(string word) {
string s=abbreviation(word);
// 词典中要么没有这个缩写,要么只有一个相同的单词
return dict[s].count(word)==dict[s].size();
}
string abbreviation(string& s)
{
if(s.size()>2) return s.front()+to_string(s.size()-2)+s.back();
else return s;
}
private:
unordered_map<string,unordered_set<string>> dict;
};