LeetCode 423. 从英文中重建数字

题目描述

423. 从英文中重建数字

思路分析

解法一:字母计数(推荐)

核心思路

  • 统计字母频次,利用唯一字母确定部分数字。
  • 依次扣减频次,得到剩余数字。
  • 最后按 0~9 构造结果字符串。


复杂度分析

  • 时间复杂度:O(n),其中 n 表示字符串长度。
  • 空间复杂度:O(1),固定字母计数。
class Solution {
    public String originalDigits(String s) {
        int[] count = new int[26];
        for (char c : s.toCharArray()) {
            count[c - 'a']++;
        }

        int[] nums = new int[10];
        nums[0] = count['z' - 'a'];
        nums[2] = count['w' - 'a'];
        nums[4] = count['u' - 'a'];
        nums[6] = count['x' - 'a'];
        nums[8] = count['g' - 'a'];

        nums[3] = count['h' - 'a'] - nums[8];
        nums[5] = count['f' - 'a'] - nums[4];
        nums[7] = count['s' - 'a'] - nums[6];
        nums[1] = count['o' - 'a'] - nums[0] - nums[2] - nums[4];
        nums[9] = count['i' - 'a'] - nums[5] - nums[6] - nums[8];

        StringBuilder builder = new StringBuilder();
        for (int i = 0; i < 10; i++) {
            for (int j = 0; j < nums[i]; j++) {
                builder.append(i);
            }
        }

        return builder.toString();
    }
}
func originalDigits(s string) string {
	count := make([]int, 26)
	for i := 0; i < len(s); i++ {
		count[s[i]-'a']++
	}

	nums := make([]int, 10)
	nums[0] = count['z'-'a']
	nums[2] = count['w'-'a']
	nums[4] = count['u'-'a']
	nums[6] = count['x'-'a']
	nums[8] = count['g'-'a']

	nums[3] = count['h'-'a'] - nums[8]
	nums[5] = count['f'-'a'] - nums[4]
	nums[7] = count['s'-'a'] - nums[6]
	nums[1] = count['o'-'a'] - nums[0] - nums[2] - nums[4]
	nums[9] = count['i'-'a'] - nums[5] - nums[6] - nums[8]

	builder := make([]byte, 0)
	for i := 0; i < 10; i++ {
		for j := 0; j < nums[i]; j++ {
			builder = append(builder, byte('0'+i))
		}
	}

	return string(builder)
}

相似题目

题目 难度 考察点
383. 赎金信 简单 计数
242. 有效的字母异位词 简单 计数
438. 找到字符串中所有字母异位词 中等 计数
1513. 仅含 1 的子串数 中等 计数
1002. 查找共用字符 简单 计数
本文作者:
本文链接: https://hgnulb.github.io/blog/2026/15132135
版权声明: 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处!