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

如何从打乱的英文数字拼接字符串提取数字并严格降序输出

解题思路

这个问题的核心突破点是优先匹配包含唯一特征字母的数字单词,避免多字母归属冲突,具体逻辑如下:

  • 先整理0-9的英文单词:zero、one、two、three、four、five、six、seven、eight、nine
  • 提取仅在单个数字单词中出现的特征字母,按优先级匹配,匹配后直接扣除对应字母的计数,避免后续干扰:
    1. 第一级完全唯一特征:z仅属于0,w仅属于2,u仅属于4,x仅属于6,g仅属于8
    2. 第二级剩余唯一特征:扣除第一级单词用掉的字母后,f仅属于5,h仅属于3,s仅属于7
    3. 第三级剩余唯一特征:扣除前两级单词用掉的字母后,o仅属于1,i仅属于9
实现步骤
  1. 统计输入字符串中每个字母的出现次数,生成计数表
  2. 按上述优先级顺序遍历特征字母和对应数字:
    • 取特征字母的当前计数作为该数字的出现次数
    • 把数字对应的单词所有字母,按出现次数从计数表中扣除
  3. 把所有得到的数字按降序排列,拼接成字符串即为最终结果
代码示例(Python)
from collections import Counter

def original_digits(s: str) -> str:
    # 优先级顺序:(特征字母, 对应数字, 数字单词)
    order = [
        ('z', 0, 'zero'),
        ('w', 2, 'two'),
        ('u', 4, 'four'),
        ('x', 6, 'six'),
        ('g', 8, 'eight'),
        ('f', 5, 'five'),
        ('h', 3, 'three'),
        ('s', 7, 'seven'),
        ('o', 1, 'one'),
        ('i', 9, 'nine')
    ]
    cnt = Counter(s)
    res = []
    for char, num, word in order:
        if cnt[char] <= 0:
            continue
        num_count = cnt[char]
        res.extend([str(num)] * num_count)
        # 扣除对应单词的字母计数
        for c in word:
            cnt[c] -= num_count
    # 降序排序拼接
    return ''.join(sorted(res, reverse=True))

# 测试示例
print(original_digits("nieignhtesevfouenr")) # 输出 9874

内容的提问来源于stack exchange,提问作者Aniket Katakdhond

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.06 14:54:04