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. SSM整合开发

    导入开发包 asm-3.2.0.RELEASE.jar asm-3.3.1.jar c3p0-0.9.jar cglib-2.2.2.jar com.springsource.net.sf.cglib ...

  2. 利用ASCII码生成指定规则的字符串

    /** * 上送终端编号的后两位生成规则 总共可以生成 (36*36-1)1295个编号 * 01...09 0A...0Z * 10...19 1A...1Z * ............... * ...

  3. Java NIO vs IO

    NIO :http://tutorials.jenkov.com/java-nio/index.html IO:http://tutorials.jenkov.com/java-io/index.ht ...

  4. Log4j.properties属性文件

    log4j.properties文件属性介绍log4j.rootLogger = [ level ] , appenderName1, appenderName2, …#level : 设定日志记录的 ...

  5. JPA常用注解(转载)

    转自:http://blog.csdn.net/wanghuan203/article/details/8698102 JPA全称Java Persistence API.JPA通过JDK 5.0注解 ...

  6. hibernate中Query的list和iterator区别

    1.Test_query_list类 public class Test_query_iterator_list { public static void main(String[] args) { ...

  7. XML的序列化(Serializer)

    步骤: //1获取XmlSerializer 类的实例 通过Xml这个工具类去获取 XmlSerializer xmlSerializer = Xml.newSerializer(); try { / ...

  8. css控制div强制换行

    div{white-space:nowrap;} 自动换行 div{ word-wrap: break-word; word-break: normal; } 强制英文单词断行 div{word-br ...

  9. oracle数据中记录被另一个用户锁住

    原因:PL/SQL里面执行语句执行了很久都没有结果,于是中断执行,于是就直接在上面改字段,在点打钩(记入改变)的时候提示,记录被另一个用户锁住. 解决方法: 第一步:(只是用于查看哪些表被锁住,真正有 ...

  10. 第4章 同步控制 Synchronization ----critical section 互斥区 ,临界区

    本章讨论 Win32 同步机制,并特别把重点放在多任务环境的效率上.撰写多线程程序的一个最具挑战性的问题就是:如何让一个线程和另一个线程合作.除非你让它们同心协力,否则必然会出现如第2章所说的&quo ...