You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Python 3为字符串列表生成最短的唯一缩写?

实现字符串的最短唯一缩写

这个需求很常见,尤其是在命令行工具、自动补全或者需要精简标识的场景里。我来给你一个简单直接的Python 3实现方案,完全匹配你期望的结果:

核心思路

要生成每个字符串的最短唯一缩写,关键在于找到最小长度的前缀,使得这个前缀在所有字符串的同长度前缀中只出现一次。具体分两步:

  1. 统计所有可能的前缀出现次数:遍历每个字符串的所有前缀(从1个字符到整个字符串),记录每个前缀的出现频次。
  2. 为每个字符串筛选最短唯一前缀:从最短的前缀(长度1)开始检查,直到找到第一个出现次数为1的前缀,这个就是该字符串的最短唯一缩写。

Python 3 实现代码

def get_shortest_unique_prefixes(words):
    # 第一步:统计所有前缀的出现次数
    prefix_counts = {}
    for word in words:
        # 遍历当前单词的所有可能前缀(长度从1到单词总长度)
        for prefix_length in range(1, len(word) + 1):
            current_prefix = word[:prefix_length]
            prefix_counts[current_prefix] = prefix_counts.get(current_prefix, 0) + 1
    
    # 第二步:为每个单词找到最短的唯一前缀
    unique_prefixes = []
    for word in words:
        for prefix_length in range(1, len(word) + 1):
            current_prefix = word[:prefix_length]
            if prefix_counts[current_prefix] == 1:
                unique_prefixes.append(current_prefix)
                break  # 找到最短前缀后停止继续检查更长的
    
    return unique_prefixes

# 测试你的输入列表
original_words = ["topology", "track", "translate", "trunk", "tunnel", "ucse", "udp", "usb", "user-group"]
result = get_shortest_unique_prefixes(original_words)
print(result)
# 输出:['to', 'trac', 'tran', 'tru', 'tu', 'uc', 'ud', 'usb', 'use']

代码解释

  • 前缀统计阶段:我们用字典prefix_counts记录每个前缀的出现次数。比如输入列表中,"topology"的前缀"to"不会和其他单词的同长度前缀重复,所以它的计数为1;而"track"和"translate"的前缀"tr"会重复,所以需要继续检查更长的前缀,直到"trac"和"tran"分别成为唯一前缀。
  • 前缀筛选阶段:对每个单词从最短前缀开始检查,一旦找到计数为1的前缀就立即停止,这样保证了我们得到的是最短的唯一前缀。

这个方案逻辑清晰,处理你给出的输入完全没问题,也能应对更复杂的场景(比如某个单词是另一个单词完整前缀的情况)。

内容的提问来源于stack exchange,提问作者Michael B. Ortiz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 06:28:39