[LeetCode] Unique Word Abbreviation

Unique Word Abbreviation

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

 

 1 class ValidWordAbbr {
 2 private:
 3     unordered_map<string, int> m_map;
 4     unordered_set<string> m_set;
 5 public:
 6     ValidWordAbbr(vector<string> &dictionary) {
 7         for (auto word : dictionary) {
 8             m_set.insert(word);
 9             if (word.length() == 2) ++m_map[word];
10             else ++m_map[word.front() + to_string(word.length() - 2) + word.back()];
11         }
12     }
13 
14     bool isUnique(string word) {
15         string key;
16         if (word.length() == 2) key = word;
17         else key = word.front() + to_string(word.length() - 2) + word.back();
18         if (m_set.find(word) == m_set.end()) return m_map[key] < 1;
19         else return m_map[key] < 2;
20     }
21 };
22 
23 
24 // Your ValidWordAbbr object will be instantiated and called as such:
25 // ValidWordAbbr vwa(dictionary);
26 // vwa.isUnique("hello");
27 // vwa.isUnique("anotherWord");

 

posted @ 2015-10-02 12:52  Eason Liu  阅读(1331)  评论(1编辑  收藏  举报