Suppose we have a string s that is formed by digits ('0' - '9') and '#'. We have to map s to one 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.
We have to find the string formed after mapping. We are taking one assumption that a unique mapping will always exist. So if the input is like “10#11#12”, then it will be “jkab”. As 10# is j, 11# is k, 1 is a and 2 is b.
To solve this, we will follow these steps −
create one map to hold all characters and their corresponding ASCII values
ans := 0, and map[‘’] := ‘’, ad i := length of string – 1
while i > 0
if s[i] is #, then
temp := “”
for j := i – 2 to i, temp := temp + s[j]
ans := map[temp] + ans
decrease i by 3
otherwise ans := map[s[i]] + ans, and decrease i by 1
return ans
Example (Python)
Let us see the following implementation to get a better understanding −
class Solution(object): def freqAlphabets(self, s): m = {} x = 'a' for i in range(1, 27): m[str(i)] = x x = chr(ord(x) + 1) ans = "" m['']='' i = len(s) - 1 while i >= 0: if s[i] == "#": temp = "" for j in range(i - 2, i): temp += s[j] ans = m[str(temp)] + ans i -= 3 else: ans = m[s[i]] + ans i -= 1 return ans ob1 = Solution() print(ob1.freqAlphabets("17#123#5621#"))
Input
"17#123#5621#"
Output
qawefu