Leetcode 423. Reconstruct Original Digits from English

Problem

Given a string s containing an out-of-order English representation of digits 0-9, return the digits in ascending order.

Algorithm

Count the occurrences of characters based on unique letters — for example, the letter ‘z’ only appears in “zero”. Then subtract these characters from the counts used in 1st types. For instance, since ‘o’ appears in “zero”, when counting “one”, subtract the number of times ‘o’ was already used in “zero”.

Code

class Solution:
    def originalDigits(self, s: str) -> str:
        letter_cnts = [0] * 26
        for c in s:
            letter_cnts[ord(c) - ord('a')] += 1
        
        number_cnts = [0] * 10
        number_cnts[0] = letter_cnts[ord('z') - ord('a')]
        number_cnts[2] = letter_cnts[ord('w') - ord('a')]
        number_cnts[4] = letter_cnts[ord('u') - ord('a')]
        number_cnts[6] = letter_cnts[ord('x') - ord('a')]
        number_cnts[8] = letter_cnts[ord('g') - ord('a')]

        number_cnts[1] = letter_cnts[ord('o') - ord('a')] - number_cnts[0] - number_cnts[2] - number_cnts[4]
        number_cnts[3] = letter_cnts[ord('h') - ord('a')] - number_cnts[8]
        number_cnts[5] = letter_cnts[ord('f') - ord('a')] - number_cnts[4]
        number_cnts[7] = letter_cnts[ord('s') - ord('a')] - number_cnts[6]
        number_cnts[9] = letter_cnts[ord('i') - ord('a')] - number_cnts[5] - number_cnts[6] - number_cnts[8]

        ans = ""
        for i in range(10):
            for j in range(number_cnts[i]):
                ans += str(i)
        
        return ans

你可能感兴趣的:(Leetcode,解题报告,leetcode,linux,算法)