This question is confusing. But if we see the wrong cases below, we can understand the meaning.
If word's abbr is not in dic, then return true.
Else if word's abbr is in dic
{The matching words in dic are all exactly the same word to the input word: return true. else return false}
Else return false;
(1)Right Solution:(need to find better solution)
59.64%,256ms. The interesting parts is that if I use d.size() instead of d.length() here, the efficiency will drop down to
292 ms, 29.2%.
class ValidWordAbbr {
public:
ValidWordAbbr(vector<string> &dictionary) {
for (string& d : dictionary) {
int n = d.length();
string abbr = d[0] + to_string(n) + d[n - 1];
mp[abbr].insert(d);
}
}
bool isUnique(string word) {
int n = word.length();
string abbr = word[0] + to_string(n) + word[n - 1];
return mp[abbr].count(word) == mp[abbr].size();
}
private:
unordered_map<string, unordered_set<string>> mp;
};
(2) Wrong Case: