[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 ...
随机推荐
- Endless Sky源码学习笔记-4
事件处理: 事件包括:debug模式切换.切换到登陆窗口.退出.窗口大小变化.全屏切换和游戏中的鼠标键盘输入.处理方式分为两类,前几个为简单的if处理,最后一个涉及到游戏中的控制和交互,且事件由每一个 ...
- 【Python全栈笔记】07 [模块二] 20 Oct 冒泡排序
给出一个列表,进行冒泡排序 原理算法: li = [52, 37, 23, 11, 3, 1, ] print(li) # 每次循环,进行一次排序,列表内数字两两比较,最大的数字排到最末尾 # 一共循 ...
- 关于apache httpd.conf脚本的理解
新人一枚,这两天一直在研究lamp的搭建,感觉自己对apache理解的不够深彻,决定写这一篇(翻译)httpd.conf文件 未完待续 cat /usr/local/apache/conf/httpd ...
- Java中Timer的用法
现在项目中用到需要定时去检查文件是否更新的功能.timer正好用于此处. 用法很简单,new一个timer,然后写一个timertask的子类即可. 代码如下: package comz.autoup ...
- ui-router中的锚点问题(angular中的锚点问题)
angular.module('anchorScrollExample', []) .controller('ScrollController', ['$scope', '$location', '$ ...
- OO基本原则
1. 单一职责原则(SRP) 一个类应该最多只能有一个因素能够给导致其变化,类中的方法应该都是相关性很高的,即"高内聚" 2. 开放-封闭原则(OC) - 扩 ...
- UITextField常用属性归纳:文本框样式、文字样式、键盘样式、左右视图样式、清除按钮设置等
(1)可以根据需要设置文本框的样式(包括形状.边框颜色.背景等). (2)可以根据需要设置文字显示样式(包括输入密码时的密文显示.文字横向居中.纵向居中上下.输入的文字是否首席木大写.文字超过后是否缩 ...
- Java--使用多线程下载,断点续传技术原理(RandomAccessFile)
一.基础知识 1.什么是线程?什么是进程?它们之间的关系? 可以参考之前的一篇文章:java核心知识点学习----并发和并行的区别,进程和线程的区别,如何创建线程和线程的四种状态,什么是线程计时器 简 ...
- git 常见命令
查看.添加.提交.删除.找回,重置修改文件 git help <command> # 显示command的help git show # 显示某次提交的内容 git show $id gi ...
- Haproxy+Keepalived高可用负载均衡详细配置
本文所使用的环境: 10.6.2.128 centos6.5 10.6.2.129 centos6.5 VIP 为10.6.2.150 要实现的目标: 实现10.6.2.128和10.6 ...