X

LEETCODE 1309. Decrypt String from Alphabet to Integer Mapping 解题思路分析

题目大意:

解码字母到整数映射

给你一个字符串 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"

示例 3:

输入:s = "25#"
输出:"y"

示例 4:

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

提示:

  • 1 <= s.length <= 1000
  • s[i] 只包含数字('0''9')和 '#' 字符。
  • s 是映射始终存在的有效字符串。

如果想查看本题目是哪家公司的面试题,请参考以下免费链接: https://leetcode.jp/problemdetail.php?id=1309

解题思路分析:

本题难度不大,暴力解的时间复杂度也就是O(n),循环一遍字符串即可。循环时,查看当前位加二的位置是否为井号,如果是,就将当前位与后一位组合起来,查看其对应的字符,并将该字符加入返回结果,同时下标加二继续循环。反之,如果当前位后2位不是井号,那么将当前位数字对应的字符加入返回结果即可。

实现代码:

public String freqAlphabets(String s) {
    // 返回结果
    StringBuilder sb = new StringBuilder();
    // 循环字符串
    for(int i=0;i<s.length();i++){
        // 当前位数字
        int c = s.charAt(i)-'0';
        // 如果当前为后2位是井号
        if(i+2<s.length()&&s.charAt(i+2)=='#'){
            // 将当前位与后一位合并
            int n = c*10+(s.charAt(i+1)-'0');
            // 将该数字对应的字符加入返回结果
            sb.append(Character.toChars(96+n));
            i+=2;
        }else{
            // 当前为后2位不是井号
            // 将当前位数字对应的字符加入返回结果
            sb.append(Character.toChars(96+c));
        }
    }
    return sb.toString();
}

本题解法执行时间为1ms。

Runtime: 1 ms, faster than 75.00% of Java online submissions for Decrypt String from Alphabet to Integer Mapping.

Memory Usage: 34.4 MB, less than 100.00% of Java online submissions for Decrypt String from Alphabet to Integer Mapping.

本网站文章均为原创内容,并可随意转载,但请标明本文链接
如有任何疑问可在文章底部留言。为了防止恶意评论,本博客现已开启留言审核功能。但是博主会在后台第一时间看到您的留言,并会在第一时间对您的留言进行回复!欢迎交流!
本文链接: http://leetcode.jp/leetcode-1309-decrypt-string-from-alphabet-to-integer-mapping-解题思路分析/
Categories: leetcode
kwantong: