从英文中重建数字

给定一个非空字符串,其中包含字母顺序打乱的英文单词表示的数字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. NVM for Windows下载与安装

    下载NVM for Windows https://github.com/coreybutler/nvm-windows/releases nvm-noinstall.zip: 这个是绿色免安装版本, ...

  2. DIV在另一个DIV里面垂直居中,水平居中

    HTML: <div class="parent"> <div class="children"> <div class=&quo ...

  3. topcpder SRM 664 div2 A,B,C BearCheats , BearPlays equalPiles , BearSorts (映射)

    A题,熊孩子测视力,水题,题意就是判断一下两个数对应位不相同的数字有多少个. #include<bits/stdc++.h> using namespace std; class Bear ...

  4. pip和apt-get换源

    pip换源 一下方法对pip和pip3同时起作用 永久换源 运行一下命令: cd ~/.pip 如果提示目录不存在的话,我们要自行创建一个,再进入目录 mkdir ~/.pip cd ~/.pip 在 ...

  5. 使用MaskedTextBox控件实现输入验证

    实现效果: 知识运用: MaskedTextBox控件的 Mask属性 BeepOnError属性 MaskInputRejected事件 实现代码: private void Form1_Load( ...

  6. CMDB API验证

    CMDB API验证 为什么做API验证 API验证是防止数据在传输的过程中,保证数据不被篡改 如何设计的API验证 灵感来源于Torando中加密Cookie的源码,主要是生成加密的随机字符串. M ...

  7. 【转】Java8学习笔记(1) -- 从函数式接口说起

    http://blog.csdn.net/zxhoo/article/details/38349011 函数式接口 理解Functional Interface(函数式接口,以下简称FI)是学习Jav ...

  8. mac层到ath9k层,ath9k层到硬件层

    如上图,整个 mac 层分成两个部分——UMAC 和 LMAC.LMAC 分成 MAC 下半部分和硬件抽象层. 硬件抽象层和ath9k层的连接 在hw.h中的函数struct ath_hw_ops() ...

  9. Bootstrap历练实例:默认的Well

    Well 是一种会引起内容凹陷显示或插图效果的容器 <div>.为了创建 Well,只需要简单地把内容放在带有 class .well 的 <div> 中即可.下面的实例演示了 ...

  10. iOS重绘机制drawRect

    iOS的绘图操作是在UIView类的drawRect方法中完成的,所以如果我们要想在一个UIView中绘图,需要写一个扩展UIView 的类,并重写drawRect方法,在这里进行绘图操作,程序会自动 ...