[LeetCode] 423 Reconstruct Original Digits from English
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"
解法:原来的字符串是乱序的,当遇到一个字母 e 的时候,并没有办法知道这个字符是属于 one、three、nine等中的一个。但是当遇到一个 z 的时候,肯定
是可以确定这个字符是属于 zero 的,因为z只出现在zero中,同理,x 也只出现在six中。
那么这就是一个优先级的问题,应该优先匹配那些属于少数数字的字符,例如优先寻找z,如果出现一个z,那么必须相应的出现e、r、o。如果字符串里面已经没有z了,
那么这个时候如果还出现了r,那么这个 r 就只可能属于 three、four中的一个了,依次类推,就能得到解法。
for (char c : s.toCharArray()) {
count[c]++;
}
int[] res = new int[10];
char[] idx = {'z', 'x', 's', 'v', 'f', 'r', 'w', 'g', 'o', 'i'};
//char[] idx = {'z', 'x', 's', 'v', 'f', 'r', 'w', 'g', 'o', 'i'};
for (char i : idx) {
while (count[i] > 0) {
switch (i) {
case 'z': //匹配z,减去zero
res[0]++;
count['z']--;
count['e']--;
count['r']--;
count['o']--;
break;
case 'x': //匹配six,减去six
res[6]++;
count['s']--;
count['i']--;
count['x']--;
break;
case 's': //匹配seven,因为之前优先匹配了six,如果这个时候,还有多余的s,那么肯定是seven
res[7]++;
count['s']--;
count['e']--;
count['v']--;
count['e']--;
count['n']--;
break;
case 'v': //匹配five,因为之前优先匹配了seven,如果这个时候还出现v,那么肯定是属于five
res[5]++;
count['f']--;
count['i']--;
count['v']--;
count['e']--;
break;
case 'f': //匹配four,因为之前匹配了four,那么这个时候还出现f,那么肯定属于four
res[4]++;
count['f']--;
count['o']--;
count['u']--;
count['r']--;
break;
case 'r': //匹配three,因为之前匹配了four,还出现three,肯定属于three
res[3]++;
count['t']--;
count['h']--;
count['r']--;
count['e']--;
count['e']--;
break;
case 'w':
res[2]++;
count['t']--;
count['w']--;
count['o']--;
break;
case 'g':
res[8]++;
count['e']--;
count['i']--;
count['g']--;
count['h']--;
count['t']--;
break;
case 'o':
res[1]++;
count['o']--;
count['n']--;
count['e']--;
break;
case 'i':
res[9]++;
count['n']--;
count['i']--;
count['n']--;
count['e']--;
break;
default:
break;
}
}
}
//System.out.print(res[0]);
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 9; i++) {
for (int j = 0; j < res[i]; j++) {
sb.append(i);
}
}
return sb.toString();
}
[LeetCode] 423 Reconstruct Original Digits from English的更多相关文章
- LeetCode 423. Reconstruct Original Digits from English——学会观察,贪心思路
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- 【LeetCode】423. Reconstruct Original Digits from English 解题报告(Python)
[LeetCode]423. Reconstruct Original Digits from English 解题报告(Python) 标签: LeetCode 题目地址:https://leetc ...
- 【LeetCode】423. Reconstruct Original Digits from English
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- 423. Reconstruct Original Digits from English (leetcode)
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- 423. Reconstruct Original Digits from English(Medium)
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- 423 Reconstruct Original Digits from English 从英文中重建数字
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字.注意: 输入只包含小写英文字母. 输入保证合法并可以转换为原始的数字,这意味着像 "ab ...
- 423. Reconstruct Original Digits from English
这个题做得突出一个蠢字.. 思路就是看unique letter,因为题里说肯定是valid string.. 一开始有几个Z就有几个ZERO 同样的还有x for six, g for eight, ...
- [LeetCode] Reconstruct Original Digits from English 从英文中重建数字
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- Leetcode: Reconstruct Original Digits from English
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
随机推荐
- 数据库mysql优化方案
1.创建索引对于查询占主要的应用来说,索引显得尤为重要.很多时候性能问题很简单的就是因为我们忘了添加索引而造成的,或者说没有添加更为有效的索引导致.如果不加索引的话,那么查找任何哪怕只是一条特定的数据 ...
- GTD
这两天坚持GTD,四分象限法管理时间,感觉学习专注度明显提升,一直没完成的马士兵JAVA基础整到第八章了,继续保持,1.13号前争取11章全整完. 3个点支撑起你的职业发展:技术,管理(管理自己.管理 ...
- hdu 1398 Square Coins (母函数)
Square Coins Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Tota ...
- 查看Windows服务器登录日志
本文以Windows7系统为例:[控制面板]——[管理工具]——[查看事件日志]——[Windows日志]——[安全].此时在视图窗口应该可以看到登录信息了,如果需要知道具体信息那么可以点击某条记录或 ...
- lvs+keepalived+nginx实现高性能负载均衡集群
一.为什么要使用负载均衡技术? 1.系统高可用性 2. 系统可扩展性 3. 负载均衡能力 LVS+keepalived能很好的实现以上的要求,LVS提供负载均衡,keepalived提供健康检查, ...
- iOS设置导航栏标题
方法一:在UIViewController中设置self.title. 方法二:设置self.navigationItem.titleView.
- linux下的redis安装以及php添加redis扩展
一.redis的安装 win版本详见: 下面是linux版本的安装步骤: step1.下载 http://redis.io/download下载完后直接make然后make install,注意sud ...
- Spring Boot + Bootstrap 出现"Failed to decode downloaded font"和"OTS parsing error: Failed to convert WOFF 2.0 font to SFNT"
准确来讲,应该是maven项目使用Bootstrap时,出现 "Failed to decode downloaded font"和"OTS parsing error: ...
- WebView网页中使用到支付宝调不起来,提示ERR_UNKNOWN_URL_SCHEME
转载自:http://blog.csdn.net/u014369799/article/details/51305788 在WebView中如果使用到支付宝,需要添加以下代码,否则操作系统会将支付宝的 ...
- base64/62 加解密的实现。
base64/62加解密代码下载地址: http://files.cnblogs.com/files/Kingfans/base64(62)加解密.zip base64: base62: