↓ 跳过正文
  1. 科学/
  2. 计算机/
  3. 算法/
  4. Leetcode/
  5. 0300-0399/

0320 列举单词的全部缩写

Solution

from typing import List

class Solution:
    def generateAbbreviations(self, word: str) -> List[str]:
        def dfs(i: int) -> List[str]:
            if i >= n:
                return [""]
            # 不缩写当前字符,直接保留word[i]
            ans = [word[i] + s for s in dfs(i + 1)]
            # 从i开始,缩写长度 j-i 的字符
            for j in range(i + 1, n + 1):
                for s in dfs(j + 1):
                    suffix = word[j] if j < n else ""
                    ans.append(str(j - i) + suffix + s)
            return ans

        n = len(word)
        return dfs(0)

if __name__ == "__main__":
    sol = Solution()
    print(sol.generateAbbreviations("word"))

Solution 2

from typing import List

class Solution:
    def generateAbbreviations(self, word: str) -> List[str]:
        n = len(word)
        ans = []
        for i in range(1 << n):
            cnt = 0
            s = []
            for j in range(n):
                if i >> j & 1:
                    cnt += 1
                else:
                    if cnt:
                        s.append(str(cnt))
                        cnt = 0
                    s.append(word[j])
            if cnt:
                s.append(str(cnt))
            ans.append("".join(s))
        return ans

if __name__ == "__main__":
    sol = Solution()
    print(sol.generateAbbreviations("word"))