[toc] leetcode 1309. 解码字母到整数映射.
题目描述
- 解码字母到整数映射
给你一个字符串 s,它由数字('0' - '9')和 '#' 组成。我们希望按下述规则将 s 映射为一些小写英文字符:
字符('a' - 'i')分别用('1' - '9')表示。 字符('j' - 'z')分别用('10#' - '26#')表示。 返回映射之后形成的新字符串。
题目数据保证映射始终唯一。
示例 1:
输入:s = "10#11#12" 输出:"jkab" 解释:"j" -> "10#" , "k" -> "11#" , "a" -> "1" , "b" -> "2". 示例 2:
输入:s = "1326#" 输出:"acz"
提示:
1 <= s.length <= 1000 s[i] 只包含数字('0'-'9')和 '#' 字符。 s 是映射始终存在的有效字符串。
解题思路
法1
哈希表:
维护一张映射表,映射a-z的字母,
循环遍历字符串,根据规则映射对应字母,并储存在返回结果数组中
返回结果字符串
- 时间复杂度(O(n))
- 空间复杂度(O(n))
执行结果
法1
func freqAlphabets(s string) string {
//a-z映射表
ai:=[]byte{'a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z'}
//计算长度
l:=len(s)
//返回数组
r:=make([]byte,l)
//赋值指针
n:=0
//翻译
for i:=0;i<l;{
if l-i>2{
if s[i+2]=='#'{
if s[i]-'1'==0{
r[n]=ai[s[i]+s[i+1]-88]
}else{
r[n]=ai[s[i]+s[i+1]-79]
}
n++
i+=3
continue
}
}
r[n]=ai[s[i]-'1']
n++
i++
}
return string(r[:n])
}
执行结果: 通过 显示详情 查看示例代码 添加备注
执行用时: 0 ms , 在所有 Go 提交中击败了 100.00% 的用户 内存消耗: 1.9 MB , 在所有 Go 提交中击败了 89.47% 的用户 通过测试用例: 40 / 40 炫耀一下:
本文由mdnice多平台发布