zoukankan      html  css  js  c++  java
  • 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);
    }
    
  • 相关阅读:
    Oracle SQL语句收集
    SqlParameter In 查询
    SQL 性能优化
    Entity Framework
    【XLL API 函数】 xlfSetName
    【XLL API 函数】xlfUnregister (Form 2)
    【XLL API 函数】xlfUnregister (Form 1)
    【Excel 4.0 函数】REGISTER 的两种形式以及VBA等效语句
    【Excel 4.0 函数】REGISTER
    【Bochs 官方手册翻译】 第一章 Bochs介绍
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12983744.html
Copyright © 2011-2022 走看看