如何从打乱的英文数字拼接字符串提取数字并严格降序输出
解题思路
这个问题的核心突破点是优先匹配包含唯一特征字母的数字单词,避免多字母归属冲突,具体逻辑如下:
- 先整理0-9的英文单词:
zero、one、two、three、four、five、six、seven、eight、nine - 提取仅在单个数字单词中出现的特征字母,按优先级匹配,匹配后直接扣除对应字母的计数,避免后续干扰:
- 第一级完全唯一特征:
z仅属于0,w仅属于2,u仅属于4,x仅属于6,g仅属于8 - 第二级剩余唯一特征:扣除第一级单词用掉的字母后,
f仅属于5,h仅属于3,s仅属于7 - 第三级剩余唯一特征:扣除前两级单词用掉的字母后,
o仅属于1,i仅属于9
- 第一级完全唯一特征:
实现步骤
- 统计输入字符串中每个字母的出现次数,生成计数表
- 按上述优先级顺序遍历特征字母和对应数字:
- 取特征字母的当前计数作为该数字的出现次数
- 把数字对应的单词所有字母,按出现次数从计数表中扣除
- 把所有得到的数字按降序排列,拼接成字符串即为最终结果
代码示例(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
相关产品推荐
相关产品推荐

