- 从英文中重建数字
给你一个字符串 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”] 这些字符之一
看题解的:通过题解的方式,先寻找出依靠一个字母就可以寻找出来的个数,然后通过一直的再来求出未知的。求出的顺序是按照数字升序来求出的。
class Solution {
public String originalDigits(String s) {
Map<Character, Integer> c = new HashMap<Character, Integer>();
for (int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
c.put(ch, c.getOrDefault(ch, 0) + 1);
}
int[] cnt = new int[10];
cnt[0] = c.getOrDefault('z', 0);
cnt[2] = c.getOrDefault('w', 0);
cnt[4] = c.getOrDefault('u', 0);
cnt[6] = c.getOrDefault('x', 0);
cnt[8] = c.getOrDefault('g', 0);
cnt[3] = c.getOrDefault('h', 0) - cnt[8];
cnt[5] = c.getOrDefault('f', 0) - cnt[4];
cnt[7] = c.getOrDefault('s', 0) - cnt[6];
cnt[1] = c.getOrDefault('o', 0) - cnt[0] - cnt[2] - cnt[4];
cnt[9] = c.getOrDefault('i', 0) - cnt[5] - cnt[6] - cnt[8];
StringBuffer ans = new StringBuffer();
for (int i = 0; i < 10; ++i) {
for (int j = 0; j < cnt[i]; ++j) {
ans.append((char) (i + '0'));
}
}
return ans.toString();
}
}
自己的:
这种做法可能在i前面就用了过多的字母,导致后面的字母不够组成一个数了,就不对。
package PTA;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.ArrayDeque;
import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;
public class Main {
public static void main(String[] args) throws IOException {
// BufferedReader in = new BufferedReader(new InputStreamReader(System.in));
int t[] = new int[]{1, 2, 3};
new Main().originalDigits("owoztneoer");
}
public String originalDigits(String s) {
int letter[] = new int[130];
StringBuffer ans=new StringBuffer();
for(char i: s.toCharArray()){
letter[i]++;
}
while(letter['z']>=1 && letter['e']>=1 && letter['r']>=1&& letter['o']>=1 ){
ans.append('0');
letter['z']--;
letter['e']--;
letter['r']--;
letter['o']--;
}
while(letter['o']>=1 && letter['n']>=1 && letter['e']>=1 ){
ans.append('1');
letter['o']--;
letter['n']--;
letter['e']--;
}
while(letter['t']>=1 && letter['w']>=1 && letter['o']>=1 ){
ans.append('2');
letter['t']--;
letter['w']--;
letter['o']--;
}
while(letter['t']>=1 && letter['h']>=1 && letter['r']>=1 &&letter['e']>=2 ){
ans.append('3');
letter['t']--;
letter['h']--;
letter['r']--;
letter['e']-=2;
}
while(letter['f']>=1 && letter['o']>=1 && letter['u']>=1 &&letter['r']>=1 ){
ans.append('4');
letter['f']--;
letter['o']--;
letter['u']--;
letter['r']--;
}
while(letter['f']>=1 && letter['i']>=1 && letter['v']>=1 &&letter['e']>=1 ){
ans.append('5');
letter['f']--;
letter['i']--;
letter['v']--;
letter['e']--;
}
while(letter['s']>=1 && letter['i']>=1 && letter['x']>=1 ){
ans.append('6');
letter['s']--;
letter['i']--;
letter['x']--;
}
while(letter['s']>=1 && letter['e']>=2 && letter['v']>=1 &&letter['n']>=1 ){
ans.append('7');
letter['s']--;
letter['e']-=2;
letter['v']--;
letter['n']--;
}
while(letter['e']>=1 && letter['i']>=1 && letter['g']>=1 &&letter['h']>=1 &&letter['t']>=1){
ans.append('8');
letter['e']--;
letter['i']--;
letter['g']--;
letter['h']--;
letter['t']--;
}
while(letter['n']>=2 && letter['i']>=1 &&letter['e']>=1){
ans.append('9');
letter['n']-=2;
letter['i']--;
letter['e']--;
}
System.out.println(ans);
return ans.toString();
}
}