An abbreviation of a word follows the form <firstletter><number><lastletter>. 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
思路:
1. 把字典中每个单词转换成abbreviation存在hash中,然后把给定的单词转换成缩写后在hash中查找!
2. 如何理解A word’s abbreviation is unique if no other word from the dictionary has the same abbreviation. 是说,要么hash中没有这个缩写,要么hash中有这个缩写,但对应的单词和给的单词一样,且只有一个!!!
class ValidWordAbbr {
public:
ValidWordAbbr(vector<string>&dictionary){
string abbr;
for(auto& cur:dictionary){
int n=cur.size();
if(n<=2)
abbr=cur;
else
abbr=cur[0]+to_string(n-2)+cur[n-1];
mm[abbr].push_back(cur);
}
}
bool isUnique(string word){
string abbr;
int n=word.size();
if(n<=2)
abbr=word;
else
abbr=word[0]+to_string(n-2)+word[n-1];
if(mm.count(abbr)==0||(mm[abbr].size()==1&&mm[abbr][0]==word)) return true;
return false;
}
private:
unordered_map<string,vector<string>> mm;
};
// Your ValidWordAbbr object will be instantiated and called as such:
// ValidWordAbbr vwa(dictionary);
// vwa.isUnique("hello");
// vwa.isUnique("anotherWord");