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)整数.具体实现见下面代码,已经很详细了 ...
随机推荐
- freebsd新添加磁盘
1.添加硬盘 2.查看现在的硬盘 3.执行sysinstall命令 4. 5. 6.按下enter键 7.A,C,Q 8. 9. 10.C,Q 11.newfs /dev/ad0 12.cd / &a ...
- 如何提高Mysql的查询效率???
1.对查询进行优化,应尽量避免全表扫描,首先应考虑在 where 及 order by 涉及的列上建立索引. 2.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索 ...
- 备份和导入Outlook 2016 电子邮件签名
在本文中,我将分享您在Outlook 2013和Outlook 2016中备份或导入签名的过程 在清除Outlook配置文件之前,请确保您通过在文件资源管理器中的配置文件中的APPDATA文件夹中复制 ...
- Python +selenium之集成测试报告与unittest单元测试
随着软件不断迭代,对应的功能也会越来越多,从而对应的测试用例也会呈指数增长.如果将全部的测试用例集成在一个文件中就会显得特别的臃肿而且维护成本也会很高. 一个很好的放大就是将这些测试yo你给里按照功能 ...
- UWP开发:应用设置存储
应用设置储存指的是保存在应用程序储存区中的键/值对的字典集合,它自动负责序列化对象,并将其保存在应用程序里.以键/值对方式提供一种快速数据访问的方式,主要用于储存一些应用信息. 1,简介 应用设置是W ...
- MovieReview—Coco(寻梦环游记)
Dream & Family The protagonist in the movie is hard to choose between family and dream. ...
- python+opencv模拟生成运动模糊核
Mark:https://www.cnblogs.com/wyh1993/p/7118559.html 效果非常的好
- groupadd - 建 立 新 群 组
总览 SYNOPSIS groupadd [-g gid [-o]] [-r] [-f] group 描述 DESCRIPTION groupadd 可 指 定 群 组 名 称 来 建 立 新 的 群 ...
- Ubuntu16.04+GTX1080配置TensorFlow并实现图像风格转换
1. TensorFlow TensorFlow是谷歌基于DistBelief进行研发的第二代人工智能学习系统,表达了高层次的机器学习计算,大幅简化了第一代系统,并且具备更好的灵活性和可延展性. Te ...
- 51nod——2504 是子序列的个数(一看就会的序列自动机原理)
还以为序列自动机是什么,写完无意间看到帖子原来这就是序列自动机……这算自己发现算法