题目描述:
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;
};
本文介绍了一种算法,用于判断给定单词在特定词典中的缩写是否唯一。通过创建一个包含词典中所有单词缩写的映射,可以快速检查任意单词的缩写是否与词典中其他单词的缩写重复。此方法适用于需要高效判断单词缩写唯一性的场景。
252

被折叠的 条评论
为什么被折叠?



