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

Note:

  1. Input contains only lowercase English letters.
  2. 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.
  3. Input length is less than 50,000.

Example 1:

Input: "owoztneoer"

Output: "012"

Example 2:

Input: "fviefuro"

Output: "45"

思路一:

  //1. 循环一遍,统计所有字母各自总数量
        //2.对 zero two  four six eight 统计(因为10个数字中,它们有各自独特的标记,分别是 z w u x g),出现标记一次,统计总数对相应的字母减1,如出现z,则zero4个字母都减去1
        //3.对剩下的数中,继续找独特点, 分别有 one three five seven (标记为 o t f s),统计总数对相应的字母减1
        //4.对剩下的nine 进行统计,i或者e出现几次,就有几个nine
   //   z one w three u five x seven g nine    for [ a b c.... ]   比如出现z就  zero 都-1

代码如下:

import java.util.HashMap;
public class Solution {
static HashMap<String, Integer> hashMap;
public static void replace(String str)
{
hashMap.replace(str, hashMap.get(str)-1);
}
public String originalDigits(String s) {
int [] ans=new int[10];
hashMap= new HashMap<String, Integer>();
String str=null;
for(int i=0;i<26;i++)
{
str=String.valueOf((char)(i+97));
hashMap.put(str,0);
}
for (int i = 0; i < s.length(); i++) {
str=s.substring(i, i+1);
hashMap.replace(str, hashMap.get(str)+1);
}
while(hashMap.get("z")>0)
{
replace("z");
replace("e");
replace("r");
replace("o");
ans[0]+=1;
}
while(hashMap.get("w")>0)
{
replace("t");
replace("w");
replace("o");
ans[2]+=1;
}
while(hashMap.get("u")>0)
{
replace("f");
replace("o");
replace("u");
replace("r");
ans[4]+=1;
}
while(hashMap.get("x")>0)
{
replace("s");
replace("i");
replace("x");
ans[6]+=1;
}
while(hashMap.get("g")>0)
{
replace("e");
replace("i");
replace("g");
replace("h");
replace("t");
ans[8]+=1;
}
while(hashMap.get("o")>0)
{
replace("o");
replace("n");
replace("e");
ans[1]+=1; }
while(hashMap.get("t")>0)
{
replace("t");
replace("h");
replace("r");
replace("e");
replace("e");
ans[3]+=1;
}
while(hashMap.get("f")>0)
{
replace("f");
replace("i");
replace("v");
replace("e");
ans[5]+=1;
}
while(hashMap.get("s")>0)
{
replace("s");
replace("e");
replace("v");
replace("e");
replace("n");
ans[7]+=1;
}
while(hashMap.get("i")>0)
{
replace("n");
replace("i");
replace("n");
replace("e");
ans[9]+=1;
} StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 9; i++){
for (int j = 0; j < count[i]; j++){
sb.append(i);
}
}
return sb.toString(); }
}

但是以上代码比较冗长,把思路一转换一下,先对所有标记字符计数,再用总数减去相应的数量,得到一个正确的答案,就可以很简短的写出来,代码很容易理解

代码如下:

public String originalDigits(String s) {
int[] count = new int[10];
for (int i = 0; i < s.length(); i++){ if (c == 'z') count[0]++;
if (c == 'w') count[2]++;
if (c == 'x') count[6]++;
if (c == 'g') count[8]++;
if (c == 'u') count[4]++;
  if (c == 's') count[7]++;
if (c == 'f') count[5]++;
if (c == 'h') count[3]++;
if (c == 'i') count[9]++;
if (c == 'o') count[1]++;
}
count[7] -= count[6];//(six,seven都有s,那么s的总数量减去6的数量就是7的数量),下面同理
count[5] -= count[4];
count[3] -= count[8];
count[9] = count[9] - count[8] - count[5] - count[6];
count[1] = count[1] - count[0] - count[2] - count[4];
StringBuilder sb = new StringBuilder();
for (int i = 0; i <= 9; i++){
for (int j = 0; j < count[i]; j++){
sb.append(i);
}
}
return sb.toString();
}
 

423. Reconstruct Original Digits from English (leetcode)的更多相关文章

  1. 【LeetCode】423. Reconstruct Original Digits from English 解题报告(Python)

    [LeetCode]423. Reconstruct Original Digits from English 解题报告(Python) 标签: LeetCode 题目地址:https://leetc ...

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

  3. 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 ...

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

  5. 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 ...

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

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

  7. 423. Reconstruct Original Digits from English

    这个题做得突出一个蠢字.. 思路就是看unique letter,因为题里说肯定是valid string.. 一开始有几个Z就有几个ZERO 同样的还有x for six, g for eight, ...

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

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

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

随机推荐

  1. 201521123024 java 第十周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 2. 书面作业 本次PTA作业题集异常.多线程 finally 题目4-2 1.1 截图你的提交结果(出现学 ...

  2. Day-18: 电子邮件

    ---恢复内容开始--- 假设要从**@163.com发送邮件到**@sina.com,会经过下面几个过程: 首先,你得使用邮件代理软件(也就是MUA:Mail User Agent),例如Outlo ...

  3. Oracle中Union与Union All的区别(适用多个数据库)

    Oracle中Union与Union All的区别(适用多个数据库) 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或 ...

  4. JVM菜鸟进阶高手之路五

    转载请注明原创出处,谢谢! 参考gc,发现大概一小时运行一次FGC,特别奇怪,笨神一看这样的问题就知道是system gc导致的,rmi默认一小时主动触发一次,由于没有gc日志,通过jstat命令观察 ...

  5. 点击截图功能 js canvas

    使用:html2canvas实现浏览器截图 <html> <head> <meta name="layout" content="main& ...

  6. Linux 安装PHP探针

    学习linux系统还是很有意思的事情,下面这个就是探针,想必有人已经看到过类似的界面主要用来查看自己服务器的运行状况,简单看看内存占用及运行时间就可以了 1 首先要安装Apahce 及 php,命令如 ...

  7. SSH端口转发详解及实例

    一.SSH端口转发简介 SSH会自动加密和解密所有SSH客户端与服务端之间的网络数据.但是,SSH还能够将其他TCP端口的网络数据通SSH链接来转发,并且自动提供了相应的加密及解密服务.这一过程也被叫 ...

  8. 洗礼灵魂,修炼python(3)--从一个简单的print代码揭露编码问题,运行原理和语法习惯

    前期工作已经准备好后,可以打开IDE编辑器了,你可以选择python自带的IDLE,也可以选择第三方的,这里我使用pycharm--一个专门为python而生的IDE 按照惯例,第一个python代码 ...

  9. Vue路由vue-router

    前面的话 在Web开发中,路由是指根据URL分配到对应的处理程序.对于大多数单页面应用,都推荐使用官方支持的vue-router.Vue-router通过管理URL,实现URL和组件的对应,以及通过U ...

  10. B树、B+树、B*树

    二叉搜索树 即二叉搜索树: 1.所有非叶子结点至多拥有两个儿子(Left和Right): 2.所有结点存储一个关键字: 3.非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树: 如 ...