0
点赞
收藏
分享

微信扫一扫

[leetcode] 1309. Decrypt String from Alphabet to Integer Mapping


Description

Given a string s formed by digits (‘0’ - ‘9’) 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.

It’s guaranteed that a unique mapping will always exist.
Example 1:

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

Example 2:

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

Example 3:

Input: s = "25#"
Output: "y"

Example 4:

Input: s = "12345678910#11#12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#"
Output: "abcdefghijklmnopqrstuvwxyz"

Constraints:

  • 1 <= s.length <= 1000
  • s[i] only contains digits letters (‘0’-‘9’) and ‘#’ letter.
  • s will be valid string such that mapping is always possible.

分析

题目的意思是:把数字字符串转换为单词,我的思路很直接,遍历的时候分有#号和没#号两种分别处理就行了。我看了一下其他人的实现,比较巧妙。数字总共到26,所以从后往前进行替换就行了,大的数带#号的,就被先替换,剩下的就是个位数了,所以也很快。

代码

class Solution:
def freqAlphabets(self, s: str) -> str:
n=len(s)
d={}
for i,ch in enumerate('abcdefghijklmnopqrstuvwxyz'):
d[str(i+1)]=ch
res=''
i=0
while(i<n):
if(i+2<n and s[i+2]=='#'):
res+=d[s[i:i+2]]
i+=3
else:
res+=d[s[i]]
i+=1
return res

参考文献

​​[LeetCode] Python 3 (two lines) (beats 100%) (16 ms) (With Explanation)​​


举报

相关推荐

0 条评论