• 1417. 重新格式化字符串『简单』


    题目来源于力扣(LeetCode

    一、题目

    1417. 重新格式化字符串

    题目相关标签:字符串

    提示:

    • 1 <= s.length <= 500
    • s 仅由小写英文字母和/或数字组成。

    二、解题思路

    1. 按题意,字符串中只存在数字与小写字母
    2. 遍历字符串,统计字符串字母与数字的数量
    3. 创建字符串长度大小的字符数组
    4. 遍历字符串,对出现的字符串与数字存储到新数组的指定位置,即可得到格式化的字符串

    三、代码实现

    public static String reformat(String s) {
        // 因为需要遍历字符串中的字符,所以将字符串转换成字符数组再进行遍历
        char[] arr = s.toCharArray();
        // 字母数量
        int letterCount = 0;
        // 数字数量
        int numCount = 0;
        // 字母与数字的个数统计
        for (char i : arr) {
            if (i >= 'a' && i <= 'z') {
                letterCount ++;
            } else {
                numCount ++;
            }
        }
        // 字母与数字的数量差大于 1 时,说明无法组成格式化后字符串
        if (letterCount - numCount > 1 || numCount - letterCount > 1) {
            return "";
        }
        // 新字符数组用于存储格式化后的字符
        char[] res = new char[s.length()];
        // 设置索引默认为 0
        int letterIndex = 0;
        int numIndex = 0;
        // 出现次数较小的一方,索引从 1 开始,否则从 0 开始
        if (letterCount == numCount) {
            // 出现次数相同时,使任一项的索引为 1
            numIndex = 1;
        } else if (letterCount < numCount) {
            letterIndex = 1;
        } else {
            numIndex = 1;
        }
        // 遍历原字符数组,进行格式化的操作
        for (int i = 0; i < arr.length; i++) {
            if (arr[i] >= 'a' && arr[i] <= 'z') {
                res[letterIndex] = arr[i];
                letterIndex += 2;  // 每次加 2,隔一个字符
            } else {
                res[numIndex] = arr[i];
                numIndex += 2;  // 每次加 2,隔一个字符
            }
        }
        return String.valueOf(res);
    }
    

    四、执行用时

    五、部分测试用例

    public static void main(String[] args) {
        String str = "a0b1c2";  // output:"0a1b2c"
    //    String str = "leetcode";  // output:""
    //    String str = "1229857369";  // output:""
    //    String str = "covid2019";  // output:"c2o0v1i9d"
    //    String str = "ab123";  // output:"1a2b3"
        String result = reformat(str);
        System.out.println(result);
    }
    
  • 相关阅读:
    学到了林海峰,武沛齐讲的Day20 装饰器
    学到了林海峰,武沛齐讲的Day19 迭代细讲
    学到了林海峰,武沛齐讲的Day18 迭代
    学到了林海峰,武沛齐讲的Day18-4 文件操作
    hdu1106 java字符串分割
    hdu1282 回文数猜想
    hud1047 java大数忽略空格
    hdu1018 阶乘位数的数学原理
    hdu1715 java解大菲波数
    hdu1316 java解高精度斐波数
  • 原文地址:https://www.cnblogs.com/zhiyin1209/p/12884756.html
Copyright © 2020-2023  润新知