持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第11天,点击查看活动详情。
题目描述
给你一个字符串 s,它由数字('0' - '9')和 '#' 组成。我们希望按下述规则将 s 映射为一些小写英文字符:
- 字符('a' - 'i')分别用('1' - '9')表示。
- 字符('j' - 'z')分别用('10#' - '26#')表示。
返回映射之后形成的新字符串。
题目数据保证映射始终唯一。
来源:力扣(LeetCode) - 示例1
输入:s = "10#11#12"
输出:"jkab"
解释:"j" -> "10#" , "k" -> "11#" , "a" -> "1" , "b" -> "2".
- 示例2
输入: s = "1326#"
输出: "acz"
提示:
1 <= s.length <= 1000s[i]只包含数字('0'-'9')和'#'字符。s是映射始终存在的有效字符串。
思路分析
据题意可知,给一个字符串 s,它由数字('0' - '9')和 '#' 组成;字符('a' - 'i')分别用('1' - '9')表示;字符('j' - 'z')分别用('10#' - '26#')表示;然后映射出新的字符串。这次不对字符串进行遍历了。映射出的字符串将全部是由字母构成,我们可以先把字符对应的数字给找出来,然后将字符串里面的数字用字母全部替换掉。
首先要进行一个循环,由于字母只有26个,我们可以只循环26次,这样就可以把全部字母所对应的数字找出来;声明两个字符串变量,用来存储字符串s中的某个数字字符串和这个数字相对应的字母,在每次的循环体中,字母用fromCharCode()方法找出来,然后用replaceAll()将字符串s中符合当前循环项数字全部用刚找出来的字符替换掉,等循环结束后,得到的字符串s就是我们要的结果。这里有个注意,遍历的时候一定要逆序遍历,这样才能把带#的先给替换掉。
AC代码
let str = "10#11#12";
function solution(str) {
let str1 = '';
let str2 = '';
for(let i=26; i>0; i--) {
if(i > 9) {
str1 = i.toString() + '#';
str2 = String.fromCharCode(i + 96);
}else{
str1 = i.toString();
str2 = String.fromCharCode(i + 96);
}
str = str.replaceAll(str1, str2);
}
console.log(str)
}
solution(str);