Post

Leetcode 1309. Decrypt String from Alphabet to Integer Mapping

You are given a string s formed by digits and '#'. We want to map s to English lowercase characters as follows: - Characters ('a' to 'i') are represented by ('1' to '9') respectively. - Characters ('j' to 'z') are represented by ('10#' to '26#') respectively. Return the string formed after mapping. The test cases are generated so that a unique mapping will always exist.

Description

You are given a string s formed by digits and '#'. We want to map s to English lowercase characters as follows:

  • Characters ('a' to 'i') are represented by ('1' to '9') respectively.
  • Characters ('j' to 'z') are represented by ('10#' to '26#') respectively.

Return the string formed after mapping.

The test cases are generated so that a unique mapping will always exist.

Example 1:

Input: s = "10#11#12"
Output: "jkab"
  • “j” -> “10#” , “k” -> “11#” , “a” -> “1” , “b” -> “2”.

Example 2:

Input: s = "1326#"
Output: "acz"

Constraints:

  • 1 <= s.length <= 1000
  • s consists of digits and the '#' letter.
  • s will be a valid string such that mapping is always possible.

Solution

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class Solution:
    # Iteration
    # Time Complexity: BigO(N)
    # Space Complexity: BigO(1)
    def freqAlphabets(self, s: str) -> str:
        res = []
        tmp = ''
        for x in reversed(s):
            if len(tmp) == 1 or x == '#':
                tmp = x + tmp
                continue

            tmp = x + tmp
            tmp = tmp.replace('#','')
            res.insert(0, chr(96 + int(tmp)))
            tmp = ''

        return ''.join(res)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/**
 * Replace string
 * Time Complexity: BigO(N)
 * Space Complexity: BigO(1)
 */
function freqAlphabets(s: string): string {
  let res: string[] = [];
  for (let i = s.length - 1; i >= 0; i--) {
    if (s[i] == "#") {
      let chr = s[i - 2] + s[i - 1] + s[i];
      res.unshift(String.fromCharCode(96 + parseInt(chr, 10)));
      i -= 2;
    } else {
      res.unshift(String.fromCharCode(96 + parseInt(s[i], 10)));
    }
  }
  return res.join("");
}
This post is licensed under CC BY 4.0 by the author.