假设我们有一个由数字('0'-'9')和'#'组成的字符串s。我们必须将s映射到一个英文小写字符,如下所示:
字符('a'至'i')分别由('1'至'9')表示。
字符('j'至'z')分别由('10#'至'26#')表示。
我们必须找到映射后形成的字符串。我们假设唯一的映射将始终存在。因此,如果输入像“ 10#11#12”,那么它将是“ jkab”。因为10#是j,11#是k,1是a并且2是b。
为了解决这个问题,我们将遵循以下步骤-
创建一个映射以容纳所有字符及其对应的ASCII值
ans:= 0,而map ['']:='',ad i:=字符串长度– 1
当我> 0
temp:=“”
对于j:= i – 2到i,temp:= temp + s [j]
ans:= map [temp] + ans
使我减少3
如果s [i]是#,则
否则ans:= map [s [i]] + ans,并将i减1
返回ans
让我们看下面的实现以更好地理解-
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#"))
"17#123#5621#"
输出结果
qawefu