423. Reconstruct Original Digits from English (leetcode)

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();
}
 
时间: 2024-08-10 23:26:29

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

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 digits in ascending order. Note: Input contains only lowercase English letters. Input is guaranteed to be valid and can be transformed to its origina

[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 digits in ascending order. Note: Input contains only lowercase English letters. Input is guaranteed to be valid and can be transformed to its origina

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

Given a non-empty string containing an out-of-order English representation of digits 0-9, output the digits in ascending order. Note: Input contains only lowercase English letters. Input is guaranteed to be valid and can be transformed to its origina

Leetcode: Reconstruct Original Digits from English

Given a non-empty string containing an out-of-order English representation of digits 0-9, output the digits in ascending order. Note: Input contains only lowercase English letters. Input is guaranteed to be valid and can be transformed to its origina

[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 digits in ascending order. Note: Input contains only lowercase English letters. Input is guaranteed to be valid and can be transformed to its origina

Leetcode-423 Reconstruct Original Digits from English(从英文中重建数字)

1 class Solution 2 { 3 public: 4 string originalDigits(string s) 5 { 6 vector<int> CharacterList(26,0); 7 for(auto c:s) 8 { 9 CharacterList[c-'a'] ++; 10 } 11 12 string result; 13 if(CharacterList['g'-'a']) 14 { 15 result.append(CharacterList['g'-'a

119. Pascal&#39;s Triangle II(LeetCode)

Given an index k, return the kth row of the Pascal's triangle. For example, given k = 3,Return [1,3,3,1]. Note:Could you optimize your algorithm to use only O(k) extra space? class Solution { public: vector<int> getRow(int rowIndex) { vector<int&

(LeetCode)杨辉三角形Pascal&#39;s Triangle

题目如下: Given numRows, generate the first numRows of Pascal's triangle. For example, given numRows = 5, Return [ [1], [1,1], [1,2,1], [1,3,3,1], [1,4,6,4,1] ] 实现代码如下: public class Solution { public List<List<Integer>> generate(int numRows) { Lis

第15个算法-实现 Trie (前缀树)(LeetCode)

解法代码来源 :https://blog.csdn.net/whdAlive/article/details/81084793 算法来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/implement-trie-prefix-tree 实现一个 Trie (前缀树),包含 insert, search, 和 startsWith 这三个操作. 示例: Trie trie = new Trie(); trie.insert("apple"