力扣423(java)-从英文中重建数字(中等)

题目:

给你一个字符串 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 保证是一个符合题目要求的字符串

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/reconstruct-original-digits-from-english
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

解题思路:

1.首先对每个字母进行词频统计;

2.可以观察出:

  • z,w,u,x,g都只在0,2,4,6,8中出现,故这几个字母出现几次,这几个数字就出现几次;
  • h只有3和8中出现,已知8的次数,可以得知3的次数;
  • f只有4和5中出现,已知4的次数,可以得知5的次数;
  • s只有6和7中出现,已知6的次数,可以得知7的次数;
  • o有0、1、2、4中出现,前面已知0、2、4的次数,可以得知1的次数;
  • i有5、6、8、9中出现,前面已知5、6、8的次数,可以得知9的次数。

3.然后按照升序进行添加,最后转换成字符串进行返回。

 代码:

 1 class Solution {
 2     public String originalDigits(String s) {
 3         int[] count = new int[26];
 4         for(int i = 0; i< s.length(); i++){
 5             count[s.charAt(i) - 'a'] ++;
 6         }
 7         int[] num = new int[10];
 8         num[0] = count['z' - 'a'];
 9         num[2] = count['w' - 'a'];
10         num[6] = count['x' - 'a'];
11         num[8] = count['g' - 'a'];
12         num[4] = count['u' - 'a'];
13         num[3] = count['h' - 'a'] - num[8];
14         num[5] = count['f' - 'a'] - num[4];
15         num[7] = count['s' - 'a'] - num[6];
16         num[1] = count['o' - 'a'] - num[0] - num[2] - num[4];
17         num[9] = count['i' - 'a'] - num[5] - num[6] - num[8];
18         StringBuffer res = new StringBuffer();
19         for(int i = 0 ; i < 10; i++){
20             for(int j = num[i]; j > 0; j--){
21                 res.append(i);
22             }
23         }
24     return res.toString();
25 
26     }
27 }

posted on 2022-05-16 11:00  我不想一直当菜鸟  阅读(29)  评论(0编辑  收藏  举报