LeetCode No.1309 解码字母到整数映射

2020/04/14 LeetCode

No.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 是映射始终存在的有效字符串。
/**
 * @param {string} s
 * @return {string}
 */
var freqAlphabets = function(s) {

};

思路

思路就是进行遍历,然后查看当前字符的后两个字符里面有没有 ‘#’,然后在做字符的转换:

解答

/**
 * @param {string} s
 * @return {string}
 */
var freqAlphabets = function(s) {
    let result = '';
    
    for(let i = 0,len=s.length;i<len;++i) {
        if(i+2 < len && s.slice(i,i+3).indexOf('#') === 2) {
            result += String.fromCharCode(96 + parseInt(s.slice(i,i+3)))
            i += 2;
        } else {
            result += String.fromCharCode(96 + parseInt(s.slice(i,i+1)))
        }
    }
    return result
};

解析

这时间复杂度 O(n).

下面是网上看到的其他答案:

另一种解答

var freqAlphabets = function(s) {
    let obj = {"1":"a","2":"b","3":"c","4":"d","5":"e","6":"f","7":"g","8":"h","9":"i","10#":"j","11#":"k","12#":"l","13#":"m","14#":"n","15#":"o","16#":"p","17#":"q","18#":"r","19#":"s","20#":"t","21#":"u","22#":"v","23#":"w","24#":"x","25#":"y","26#":"z"},
        arr = s.match(/\d{1,2}#|\d/g), res = ''
    for(let i=0; i<arr.length; i++){
        res += obj[arr[i]]
    }
    return res
}

想法

时间复杂度没有变化.

来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/decrypt-string-from-alphabet-to-integer-mapping/submissions/

Search

    Table of Contents