Leetcode 423.从英文中重建数字
从英文中重建数字
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9。按升序输出原始的数字。
注意:
- 输入只包含小写英文字母。
- 输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。
- 输入字符串的长度小于 50,000。
示例 1:
输入: "owoztneoer"
输出: "012" (zeroonetwo)
示例 2:
输入: "fviefuro"
输出: "45" (fourfive)
解题思路
这道题看起来就不是很难,第一步肯定得写一下各个数字对应的英文单词,看看它们都包含了哪些字符,并且找找有没有什么规律或是特点。
所以我列出了下面的表格:
字母 包含该字母的单词
e zero, one, three, five, seven, eight, nine
f four, five
g eight
h three, eight
i five, six, eight, nine
n one, seven, nine
o zero, one, two, four
r zero, three, four
s six, seven
t two, three, eight
u four
v five, seven
w two
x six
z zero
由上表我们发现部分字符是某个单词独有,这意味着这些字符的个数就是数字的个数,比如说'z'这个字符是zero单词独有的, 所以'z'的个数就是0的个数。
如果我们用numbers数组存储出现的数字个数,其中下标表示着对应0-9的数字,那么我们会有下面这个结果:
数字 数字的个数
0 numbers[0] = 'z'的个数
2 numbers[2] = 'w'的个数
4 numbers[4] = 'u'的个数
6 numbers[6] = 'x'的个数
8 numbers[8] = 'g'的个数
而其他的数字个数,比如5的个数,因为'f'的数目由four和five的数目组成,而我们已知four的数目为numbers[4],所以numbers[5] = 'f'的个数-number[4]。其他的数字同样处理。
最后我们得到了下面的结果:
数字 数字的个数
0 numbers[0] = 'z'的个数
2 numbers[2] = 'w'的个数
4 numbers[4] = 'u'的个数
6 numbers[6] = 'x'的个数
8 numbers[8] = 'g'的个数
5 numbers[5] = 'f'的个数 - numbers[4]
3 numbers[3] = 'h'的个数 - numbers[8]
7 numbers[7] = 's'的个数 - numbers[6]
1 numbers[1] = 'o'的个数 - numbers[0] - numbers[2] - numbers[4]
9 numbers[9] = 'i'的个数 - numbers[5] - numbers[6] - numbers[8]
利用这个表格,通过代码找出上面表格中出现的字符的数目,然后按照表格里的公式,就能得到所有数字出现的次数,最后按照顺序把相应个数的数字添加到结果字符串中就通过了这道题。
public class Solution {
public String originalDigits(String s) {
int[] temp = new int[26];
int[] digit = new int[10]; for(int i = 0; i < s.length(); i++) {
temp[s.charAt(i)-97]++;
} digit[0] = temp['z' -97];
digit[2] = temp['w' -97];
digit[6] = temp['x' -97];
digit[8] = temp['g' -97];
digit[4] = temp['u' -97]; digit[1] = temp['o' -97] - (digit[0] + digit[2] + digit[4]);
digit[3] = temp['h' -97] - digit[8];
digit[5] = temp['f' -97] - digit[4];
digit[7] = temp['s' -97] - digit[6];
digit[9] = temp['i' -97] - (digit[6] + digit[8] + digit[5]); StringBuilder sb = new StringBuilder();
for(int i = 0; i < digit.length; i++){
for(int j = 0; j < digit[i]; j++){
sb.append(i+"");
}
}
return sb.toString();
}
}
Leetcode 423.从英文中重建数字的更多相关文章
- Java实现 LeetCode 423 从英文中重建数字
423. 从英文中重建数字 给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字. 注意: 输入只包含小写英文字母. 输入保证合法并可以转换为原始的数字,这意味着像 ...
- [LeetCode] 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 从英文中重建数字
给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字.注意: 输入只包含小写英文字母. 输入保证合法并可以转换为原始的数字,这意味着像 "ab ...
- [Swift]LeetCode423. 从英文中重建数字 | Reconstruct Original Digits from English
Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...
- EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字
EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字 Function 求数字和字母(对象 As String) '在文本与数字混杂中提取数字和字母 Dim myReg ...
- 在sqlserver中如何从字符串中提取数字,英文,中文,过滤重复字符
原文:在sqlserver中如何从字符串中提取数字,英文,中文,过滤重复字符 最近做项目的时候,经常用到一个字符串中的某些字符,处理起来非常的棘手,现在用下面的方法就可以很方便的从字符串中处理你想要的 ...
- SqlServer判断表中某列是否包含中文,英文,纯数字
原文:SqlServer判断表中某列是否包含中文,英文,纯数字 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog ...
- [LeetCode]面试题53 - I. 在排序数组中查找数字 I(二分);面试题53 - II. 0~n-1中缺失的数字(二分)
##面试题53 - I. 在排序数组中查找数字 I ###题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 ...
- 随机生成长度为len的密码,且包括大写、小写英文字母和数字
一道华三面试题,随机生成长度为len的密码,且包括大写.小写英文字母和数字,主要Random类的使用,random.nextInt(len)表示生成[0,len)整数.具体实现见下面代码,已经很详细了 ...
随机推荐
- db2数据库创建索引,删除索引,查看表索引,SQL语句执行计划以及优化建议
1.建立表索引 create index 索引名 on 表名(列名,列名); 2.删除表索引 drop index 索引名 on 表名; 3.查看表索引 select * from sysibm.sy ...
- python爬虫之路——基本文件操作
介绍python如何打开文件和读取数据 新建TXT文档,为追加模式: f=open('c;/wendang/demo.txt','a+') content="abcdefg123456789 ...
- 不喜欢SAP GUI?那试试用Eclipse进行ABAP开发吧
Jerry和SAP成都研究院一些新同事聊天时,谈到ABAP和SAP GUI这个话题.很多新同事在加入SAP成都之前,是做Java和C++开发的,习惯了Eclipse/IntelliJ IDEA/Vis ...
- UVALive 4670 Dominating Patterns (AC自动机)
AC自动机的裸题.学了kmp和Trie以后不难看懂. 有一些变化,比如0的定义和f的指向,和建立失配边,以及多了后缀连接数组last.没有试过把失配边直接当成普通边(一开始还是先这样写吧). #inc ...
- ListView适配器Adapter介绍与优化
一.ListView与Adapter的关系 ListView是Android开发过程中较为常见的组件之一,它将数据以列表的形式展现出来.一般而言,一个ListView由以下三个元素组成: 1.View ...
- 洛谷P2347 砝码称重
题目 貌似是某年提高组签到题,六重循环零压力AC,差点怒踩std 但本蒟蒻决定写正解——多重背包,果断20分 原因是写错了状态转移方程...神才知道我咋过的样例和两个测试点 扯远了 多重背包 简单说一 ...
- 【离线 撤销并查集 线段树分治】bzoj1018: [SHOI2008]堵塞的交通traffic
本题可化成更一般的问题:离线动态图询问连通性 当然可以利用它的特殊性质,采用在线线段树维护一些标记的方法 Description 有一天,由于某种穿越现象作用,你来到了传说中的小人国.小人国的布局非常 ...
- JDBC-防止SQL注入问题
String sql = "select * from user where name = '" + name + "' and password = '" ...
- 01Qt中的隐式共享
隐式共享 隐式共享又称为回写复制(copy on write).当两个对象共享同一分数据时(通过浅拷贝实现数据共享),如果数据不改变,则不进行数据的复制.而当某个对象需要需要改变数据时,则进行深拷 ...
- Linux:FTP服务匿名用户,本地用户,虚拟用户配置
匿名用户 FTP协议占用两个端口号: 21端口:命令控制,用于接收客户端执行的FTP命令. 20端口:数据传输,用于上传.下载文件数据. 实验:匿名访问,服务器192.168.10.10 客户 ...