8.23 - hard - 100

527. Word Abbreviation

基本的想法就是先計算出所有的abbr,然后把相同的abbr的index記錄下來,然后依次擴展直到這一位消除了所有的相同的,這個video簡直是神解釋:https://www.youtube.com/watch?v=yAQMcGY4c90

class Solution(object):
    def wordsAbbreviation(self, dict):
        """
        :type dict: List[str]
        :rtype: List[str]
        """
        def get_abbreviation(word,old_abbreviation):
            if old_abbreviation == '':
                abbreviation = word[0] + str(len(word[1:-1])) + word[-1]                
            else:
                for i in range(len(old_abbreviation)):
                    if old_abbreviation[i].isdigit():
                        abbreviation = word[:i+1] + str(len(word[i+1:-1])) + word[-1]
                        break
            if len(word) <= len(abbreviation):
                abbreviation = word
            return abbreviation
        
        
        abbreviations = [''] * len(words)
        duplicates = collections.defaultdict(list)
        for i,word in enumerate(words):
            abbreviations[i] = get_abbreviation(word,'')
            duplicates[abbreviations[i]] += i,
        
        for i in range(len(abbreviations)):
            if len(duplicates[abbreviations[i]]) == 1:
                continue
            else:
                while len(duplicates[abbreviations[i]]) > 1:
                    for index in duplicates[abbreviations[i]]:
                        abbreviation = get_abbreviation(words[index], abbreviations[index])
                        abbreviations[index] = abbreviation
                        duplicates[abbreviation] += index,
                        
        return abbreviations
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容