[Leetcode] 423. Reconstruct Original Digits from English 解题报告

来源:互联网 发布:手机网站源码模板 编辑:程序博客网 时间:2024/05/21 10:46

题目

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"

思路

我刚刚开始觉得这道题目可以用BackTracking的方法来解决,后来发现想复杂了:其实根据0-9的英文字母的构成方式,可以直接推导出各个字母的出现次数。例如,g只会出现在eight中,x只会出现在six中等等。。。这样当建立起来字符串中字符和出现次数的哈希映射之后,我们就可以直接推导出各个英文单词的出现个数。

代码

class Solution {public:    string originalDigits(string s) {        map<char, int> letters;        vector<int> numbers(10, 0);        string ret;        for (char c: s) {            ++letters[c];        }        // we have to follow this order strictly        numbers[8] = letters['g'];        numbers[6] = letters['x'];        numbers[4] = letters['u'];        numbers[2] = letters['w'];        numbers[0] = letters['z'];        numbers[5] = letters['f'] - numbers[4];        numbers[3] = letters['h'] - numbers[8];        numbers[7] = letters['s'] - numbers[6];        numbers[1] = letters['o'] - numbers[0] - numbers[2] - numbers[4];        numbers[9] = letters['i'] - numbers[5] - numbers[6] - numbers[8];        // construct the result        for (int i = 0; i < 10; i++) {            if (numbers[i] > 0) {                ret.insert(ret.end(), numbers[i], '0' + i);            }        }        return ret;    }};

阅读全文
0 0