LeetCode-Python-288. 单词的唯一缩写

一个单词的缩写需要遵循 <起始字母><中间字母数><结尾字母> 这样的格式。

以下是一些单词缩写的范例:

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)

 

你可能感兴趣的:(Leetcode,字符串,哈希表)