[LeetCode] Reconstruct Original Digits from English

Reconstruct Original Digits from Englishgit

 

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

Note:this

  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:spa

Input: "owoztneoer"

Output: "012"

Example 2:code

Input: "fviefuro"

Output: "45"

Subscribe to see which companies asked this question.orm

 

快两年没更新博客了,今天看了一下Leetcode,都500多道题了,就随便交了一道。blog

开始考虑到用DFS,可是考虑到有些Digit能够由一个字母惟一确认,而后推算了一下,发现全部Digit均可以肯定,就直接算答案了。很久没刷过题了,代码质量直线降低啊。three

 

class Solution {
public:
    void update(int* count, string s, int n) {
        for (auto c : s) {
            count[c - 'a'] -= n;
        }
    }
string originalDigits(string s) { vector<string> dict = {"zero", "one", "two", "three", "fore", "five", "six", "seven", "eight", "nine"}; int digitOrder[10] = {0, 8, 6, 2, 3, 7, 5, 4, 1, 9}; char keyOrder[10] = {'z', 'g', 'x', 'w', 'h', 's', 'v', 'f', 'o', 'i'}; int count[26] = {0}; for (auto c : s) { ++count[c - 'a']; } int res[10] = {0}; for (int i = 0; i < 10; ++i) { res[digitOrder[i]] = count[keyOrder[i] - 'a']; update(count, dict[digitOrder[i]], res[digitOrder[i]]); } string str = ""; for (int i = 0; i < 10; ++i) { for (int j = 0; j < res[i]; ++j) { str += ('0' + i); } } return str; } };
相关文章
相关标签/搜索