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.