标签:Digits digits cnt int nine English Reconstruct handleDigit Input
Reconstruct Original Digits from English (M)
题目
Given a non-empty string containing an out-of-order English representation of digits 0-9
, output the digits in ascending order.
Note:
- Input contains only lowercase English letters.
- Input is guaranteed to be valid and can be transformed to its original digits. That means invalid inputs such as "abc" or "zerone" are not permitted.
- Input length is less than 50,000.
Example 1:
Input: "owoztneoer"
Output: "012"
Example 2:
Input: "fviefuro"
Output: "45"
题意
将一个数字字符串中的每一个数字转化为英文,并打乱所有字符顺序,要求还原出数字字符串。
思路
找规律题。依照一定的顺序,每一个数字的英文中都有一个唯一的字符能代表这个英文,如'z'只能代表"zero"。可以发现有以下规律:
-
剩余数字:["zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine"],其中具有特征字符的有:
('z', "zero"), ('w', "two"), ('u', "four"), ('x', "six"), ('g', "eight")
-
剩余数字:["one", "three", "five", "seven", "nine"],其中具有特征字符的有:
('o', "one"), ('h', "three"), ('f', "five")
-
剩余数字:["seven", "nine"],其中具有特征字符的有:
('s', "seven"), ('i', "nine")
按照上述顺序转化即可得到答案。
代码实现
Java
class Solution {
public String originalDigits(String s) {
StringBuilder sb = new StringBuilder();
int[] digits = new int[10];
int[] cnt = new int[26];
for (char c : s.toCharArray()) {
cnt[c - 'a']++;
}
handleDigit(digits, cnt, 0, "zero", 'z');
handleDigit(digits, cnt, 2, "two", 'w');
handleDigit(digits, cnt, 4, "four", 'u');
handleDigit(digits, cnt, 6, "six", 'x');
handleDigit(digits, cnt, 8, "eight", 'g');
handleDigit(digits, cnt, 1, "one", 'o');
handleDigit(digits, cnt, 3, "three", 'h');
handleDigit(digits, cnt, 5, "five", 'f');
handleDigit(digits, cnt, 7, "seven", 's');
handleDigit(digits, cnt, 9, "nine", 'i');
for (int i = 0; i < 10; i++) {
for (int j = 0; j < digits[i]; j++) {
sb.append(i);
}
}
return sb.toString();
}
private void handleDigit(int[] digits, int[] cnt,int digit, String word, char unique) {
if (cnt[unique - 'a'] > 0) {
int tmp = cnt[unique - 'a'];
digits[digit] += tmp;
for (char c : word.toCharArray()) {
cnt[c - 'a'] -= tmp;
}
}
}
}
标签:Digits,digits,cnt,int,nine,English,Reconstruct,handleDigit,Input 来源: https://www.cnblogs.com/mapoos/p/14589137.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。