• 1309. 解码字母到整数映射『简单』


    题目来源于力扣(LeetCode

    一、题目

    1309. 解码字母到整数映射

    题目相关标签:字符串

    说明:

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

    二、解题思路

    1. 声明 StringBuilder 来记录每一次遍历得到的结果

    2. 倒序遍历字符数组,遇到 # 字符时对前两位数字字符进行 int 值的转换及计算,并将数值对应的字母字符 append 到缓冲字符串中

    3. 遇到单个数字字符时,也进行 int 值的转换,将该数值对应的字母字符 append 到缓冲字符串中

    4. 最后缓冲字符串需要进行反转,得到最终结果

    三、代码实现

    3.1 线性扫描法

    public static String freqAlphabets(String s) {
        StringBuilder sb = new StringBuilder();
        char[] arr = s.toCharArray();
        int count = 0;
        // 从后往前遍历
        for (int i = arr.length - 1; i >= 0; i--) {
            // 为 # 字符时
            if (arr[i] == '#') {
                // 得到前两位数字字符的数字形式
                count = Integer.parseInt("" + arr[i - 2] + arr[i - 1]);
                // 索引减 2
                i -= 2;
            } else {
                // 当前数字字符的数字形式
                count = Integer.parseInt("" + arr[i]);
            }
            // 数字对应的 ascii 字符:10 - j(106),即加 'a' - 1
            sb.append((char) (count + 96));
        }
        return sb.reverse().toString();
    }
    

    3.2 线性扫描法——优化版

    public static String freqAlphabets(String s) {
        StringBuilder sb = new StringBuilder();
        char[] arr = s.toCharArray();
        int count = 0;
        for (int i = arr.length - 1; i >= 0; i--) {
            if (arr[i] == '#') {
                // 数字字符转数值
                count = (arr[i - 2] - '0') * 10 + (arr[i - 1] - '0');
                // 索引减 2
                i -= 2;
            } else {
                // 数字字符转数值
                count = (arr[i] - '0');
            }
            // 将数字字符转换成的整数,映射为单个字母字符,添加到缓冲字符串中
            sb.append((char) ((count - 1) + 'a'));
        }
        return sb.reverse().toString();
    }
    

    四、执行用时

    4.1 线性扫描法

    4.2 线性扫描法——优化版

    五、部分测试用例

    public static void main(String[] args) {
        String s = "10#11#12";  // output:"jkab"
    //    String s = "1326#";  // output:"acz"
    //    String s = "25#";  // output:"y"
        
    //    String s = "12345678910#11#12#13#14#15#16#17#18#19#20#21#22#23#24#25#26#";
    	// output:"abcdefghijklmnopqrstuvwxyz"
        
        String result = freqAlphabets(s);
        System.out.println(result);
    }
    
  • 相关阅读:
    eclipse luna maven失效的原因
    利用线性探测法解决hash冲突
    PHP和JavaScript将字符串转换为数字string2int
    JavaScript 编程易错点整理
    使用phpstudy创建本地虚拟主机
    单例模式
    PHP使用cookie时遇到的坑
    Redis安装与配置
    CI框架2.x的验证码中所遇问题解决
    用delete和trancate删除表记录的区别
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12983744.html
Copyright © 2020-2023  润新知