从英文中重建数字

给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9。按升序输出原始的数字。

注意:

  1. 输入只包含小写英文字母。
  2. 输入保证合法并可以转换为原始的数字,这意味着像 "abc" 或 "zerone" 的输入是不允许的。
  3. 输入字符串的长度小于 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.从英文中重建数字的更多相关文章

  1. Java实现 LeetCode 423 从英文中重建数字

    423. 从英文中重建数字 给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字. 注意: 输入只包含小写英文字母. 输入保证合法并可以转换为原始的数字,这意味着像 ...

  2. [LeetCode] Reconstruct Original Digits from English 从英文中重建数字

    Given a non-empty string containing an out-of-order English representation of digits 0-9, output the ...

  3. 423 Reconstruct Original Digits from English 从英文中重建数字

    给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字0-9.按升序输出原始的数字.注意:    输入只包含小写英文字母.    输入保证合法并可以转换为原始的数字,这意味着像 "ab ...

  4. [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 ...

  5. EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字

    EXCEL表格单元格中包含数字英文和汉字,如何自动去掉汉字,保留英文和数字 Function 求数字和字母(对象 As String) '在文本与数字混杂中提取数字和字母   Dim myReg    ...

  6. 在sqlserver中如何从字符串中提取数字,英文,中文,过滤重复字符

    原文:在sqlserver中如何从字符串中提取数字,英文,中文,过滤重复字符 最近做项目的时候,经常用到一个字符串中的某些字符,处理起来非常的棘手,现在用下面的方法就可以很方便的从字符串中处理你想要的 ...

  7. SqlServer判断表中某列是否包含中文,英文,纯数字

    原文:SqlServer判断表中某列是否包含中文,英文,纯数字 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https://blog ...

  8. [LeetCode]面试题53 - I. 在排序数组中查找数字 I(二分);面试题53 - II. 0~n-1中缺失的数字(二分)

    ##面试题53 - I. 在排序数组中查找数字 I ###题目 统计一个数字在排序数组中出现的次数. 示例 1: 输入: nums = [5,7,7,8,8,10], target = 8 输出: 2 ...

  9. 随机生成长度为len的密码,且包括大写、小写英文字母和数字

    一道华三面试题,随机生成长度为len的密码,且包括大写.小写英文字母和数字,主要Random类的使用,random.nextInt(len)表示生成[0,len)整数.具体实现见下面代码,已经很详细了 ...

随机推荐

  1. ImageLoader常用方法注释

    ImageLoader中的常用方法及相关作用注释 ImageLoader 的ImageLoaderConfiguration config 配置 ImageLoaderConfiguration co ...

  2. Java 方法重载与引用数组类型

    1.方法重载  1)方法的签名 方法的签名包含方法名和参数列表 一个类中,不可以有两个方法的签名完全相同,即一个类中不能有两个方法的方法名和参数列表都一样. public class Test{ pu ...

  3. MovieReview—Ghost in the Shell(攻壳机动队:笑脸男事件,个别的11人事件)

    AI with Wisdom         I have recently watched two films in the series of Ghost in the Shell, Smilin ...

  4. MyLinkedList

    /** * 节点类 * @author JP * */ class Node { Object value;//节点元素值 Node pre;//上一个节点 Node next;//下一个节点 pub ...

  5. AMD、CMD规范

    本文原链接:https://cloud.tencent.com/developer/article/1177217 AMD && CMD 前言 一.模块 二.CommonJS 三.AM ...

  6. Linux学习日记:第一天

    一,登录Linux Login:test Password:123456 Last Login:Wed Dec 3 22:40:02 on tty1 test@ubuntu: startx    进入 ...

  7. cocos2dx 3.x for lua "异步加载"实现过程

    在lua中,cocos2dx 建立的栈只能被一个线程(主线程)访问,如果在c++建立子线程,然后通过c++调用lua回调函数实现异步加载就会报错. 如果试图通过c++子线程直接实现加载资源,返回一个布 ...

  8. 禁止按键F5和禁止鼠标右键菜单 js代码

    <script language="javascript"> //禁止按键F5 document.onkeydown = function(e){ e = window ...

  9. 【线性基】bzoj2844: albus就是要第一个出场

    线性基求可重rank 题目描述 给定 n 个数 $\{ a_i \}$ ,以及数 $x$. 将 $\{ a_i \}$​ 的所有子集(包括空集)的异或值从小到大排序,得到 $\{ b_i \} $. ...

  10. [BZOJ] 4145: [AMPPZ2014]The Prices

    设\(f[S][i]\)表示考虑到第\(i\)家店,已经买了集合\(S\)内的物品 一个朴素的想法是枚举子集转移 \[ f[S][i]=\min\{f[T][i-1]+cost[S\oplus T][ ...