字符串解压缩

288 阅读2分钟

问题描述

小U拿到了一个通过特殊方式压缩的字符串,其中每个字母后面可能跟着一个数字,这个数字表示该字母在解压后的字符串中需要重复的次数。如果一个字母后面没有跟随数字,那么该字母在解压后的字符串中只出现一次。请帮助小U解压这个字符串并输出最终的解压结果。


测试样例

样例1:

输入:s = "a2b3c4"
输出:'aabbbcccc'

样例2:

输入:s = "d5ef2"
输出:'dddddeff'

样例3:

输入:s = "x3y1z"
输出:'xxxyz'

问题理解

你需要解压一个压缩字符串,其中每个字母后面可能跟着一个数字,这个数字表示该字母在解压后的字符串中需要重复的次数。如果一个字母后面没有跟随数字,那么该字母在解压后的字符串中只出现一次。

数据结构选择

  • 使用 StringBuilder 来构建最终的解压字符串,因为 StringBuilder 在字符串拼接操作上比 String 更高效。

算法步骤

  1. 遍历字符串:逐个字符遍历输入的字符串。

  2. 识别字母和数字

    • 如果当前字符是字母,检查下一个字符是否是数字。
    • 如果下一个字符是数字,解析出完整的数字(可能有多位数),然后将该字母重复相应的次数添加到 StringBuilder 中。
    • 如果下一个字符不是数字,直接将该字母添加到 StringBuilder 中。
  3. 处理边界情况

    • 确保最后一个字符的处理(如果最后一个字符是字母且后面没有数字,直接添加到 StringBuilder 中)。

总结

通过上述步骤,你可以有效地解压字符串并构建出最终的结果。希望这些思路能帮助你更好地完成这个任务。如果你有任何具体的问题或需要进一步的代码提示,请告诉我!

public class Main {
    public static String solution(String s) {
        // 将输入字符串转换为字符数组
        char[] str = s.toCharArray();
        // 使用 StringBuilder 来构建最终的解压字符串
        StringBuilder sb = new StringBuilder();
        
        // 遍历字符数组
        for (int i = 0; i < str.length; i++) {
            // 如果当前字符是字母
            if (Character.isLetter(str[i])) {
                // 获取当前字母
                char letter = str[i];
                // 初始化重复次数为1
                int repeat = 1;
                
                // 检查下一个字符是否是数字
                if (i + 1 < str.length && Character.isDigit(str[i + 1])) {
                    // 解析完整的数字
                    int j = i + 1;
                    while (j < str.length && Character.isDigit(str[j])) {
                        j++;
                    }
                    // 将数字字符转换为整数
                    repeat = Integer.parseInt(s.substring(i + 1, j));
                    // 更新 i 的值,跳过已经解析的数字部分
                    i = j - 1;
                }
                
                // 将字母重复相应的次数添加到 StringBuilder 中
                for (int k = 0; k < repeat; k++) {
                    sb.append(letter);
                }
            }
        }
        
        // 返回最终的解压字符串
        return sb.toString();
    }

    public static void main(String[] args) {
        System.out.println(solution("a2b3c4").equals("aabbbcccc"));
        System.out.println(solution("d5ef2").equals("dddddeff"));
        System.out.println(solution("x3y1z").equals("xxxyz"));
    }
}