力扣链接
题目描述
给你一个字符串 s ,其中包含字母顺序打乱的用英文单词表示的若干数字(0-9)。按 升序 返回原始的数字。
示例 1:
输入:s = “owoztneoer” 输出:“012” 示例 2:
输入:s = “fviefuro” 输出:“45”
提示:
1 <= s.length <= 105 s[i] 为 ["e","g","f","i","h","o","n","s","r","u","t","w","v","x","z"] 这些字符之一s 保证是一个符合题目要求的字符串
题解思路
题解链接
代码
class Solution {
public String originalDigits(String s) {
Map<Character, Integer> map = new HashMap<>();
for (int i = 0; i < s.length(); i++) {
char temp = s.charAt(i);
map.put(temp, map.getOrDefault(temp, 0) + 1);
}
int[] count = new int[10];
count[0] = map.getOrDefault('z', 0);
count[2] = map.getOrDefault('w', 0);
count[4] = map.getOrDefault('u', 0);
count[6] = map.getOrDefault('x', 0);
count[8] = map.getOrDefault('g', 0);
count[7] = map.getOrDefault('s', 0) - count[6];
count[5] = map.getOrDefault('v', 0) - count[7];
count[3] = map.getOrDefault('h', 0) - count[8];
count[1] = map.getOrDefault('o', 0) - count[0] - count[2] - count[4];
count[9] = map.getOrDefault('i', 0) - count[8] - count[6] - count[5];
StringBuilder builder = new StringBuilder();
for (int i = 0; i < 10; i++) {
for (int i1 = 0; i1 < count[i]; i1++) {
builder.append((char)(i + '0'));
}
}
return builder.toString();
}
}
复杂度分析
- 时间复杂度:O(|s|),其中 |s|是字符串 s 的长度。
- 空间复杂度:O(∣Σ∣),其中Σ 表示字符集,∣Σ∣ 表示字符集的大小,在本题中Σ 为所有在0~9 中出现的英文字母。
|