一个单词的缩写需要遵循 <起始字母><中间字母数><结尾字母> 这样的格式。
以下是一些单词缩写的范例:
a) it --> it (没有缩写)
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
假设你有一个字典和一个单词,请你判断该单词的缩写在这本字典中是否唯一。若单词的缩写在字典中没有任何 其他 单词与其缩写相同,则被称为单词的唯一缩写。
示例:
给定 dictionary = [ "deer", "door", "cake", "card" ]
isUnique("dear") -> false
isUnique("cart") -> true
isUnique("cane") -> false
isUnique("make") -> true
来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/unique-word-abbreviation
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。
思路:
显然要用单词缩写作为key建立哈希表,
注意要分长度 > 2的单词, 和长度 <= 2 的单词,分别处理。
最后记得看到题目给的 其他 这个条件。
class ValidWordAbbr(object):
def __init__(self, dictionary):
"""
:type dictionary: List[str]
"""
from collections import defaultdict
self.dic = defaultdict(list)
for word in dictionary:
if len(word) <= 2:
self.dic[word].append(word)
else:
self.dic[word[0] + str(len(word) - 2) + word[-1]].append(word)
def isUnique(self, word):
"""
:type word: str
:rtype: bool
"""
if len(word) <= 2:
return not self.dic[word] or self.dic[word] == [word] * len(self.dic[word])
else:
s = word[0] + str(len(word) - 2) + word[-1]
return not self.dic[s] or self.dic[s] == [word] * len(self.dic[s])
# Your ValidWordAbbr object will be instantiated and called as such:
# obj = ValidWordAbbr(dictionary)
# param_1 = obj.isUnique(word)