LeetCode 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. 查找共用字符 | 简单 | 计数 |
本博客所有文章除特别声明外,均采用
CC BY-NC-SA 4.0
许可协议,转载请注明出处!