• 1417. 重新格式化字符串--来源:力扣(LeetCode)


    题目描述:

    给你一个混合了数字和字母的字符串 s,其中的字母均为小写英文字母。

    请你将该字符串重新格式化,使得任意两个相邻字符的类型都不同。也就是说,字母后面应该跟着数字,而数字后面应该跟着字母。

    请你返回 重新格式化后 的字符串;如果无法按要求重新格式化,则返回一个 空字符串 。

    示例 1:

    输入:s = "a0b1c2"
    输出:"0a1b2c"
    解释:"0a1b2c" 中任意两个相邻字符的类型都不同。 "a0b1c2", "0a1b2c", "0c2a1b" 也是满足题目要求的答案。

    示例 2:

    输入:s = "leetcode"
    输出:""
    解释:"leetcode" 中只有字母,所以无法满足重新格式化的条件。


    示例 3:

    输入:s = "1229857369"
    输出:""
    解释:"1229857369" 中只有数字,所以无法满足重新格式化的条件。


    示例 4:

    输入:s = "covid2019"
    输出:"c2o0v1i9d"


    示例 5:

    输入:s = "ab123"
    输出:"1a2b3"
     

    提示:

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

    结果:

     

    主要思路:

    通过创建两个字节数据,得到可以操作的数据类型,先对副本中数据进行排序,并分别计算数量。

    从副本中获取数据插入对应位置,数量多的一类放在偶数位

     代码:

    class Solution {
        public String reformat(String s) {
    
        //创建字符数组(一个副本)
        char[] chars = new char[s.length()];
        char[] chars2 = new char[s.length()];
        s.getChars(0, s.length(), chars, 0);
        s.getChars(0, s.length(), chars2, 0);
    
        //计数器
        int j = 0;//字母
        int k = 0;//数字
    
        //对对字符数组内部进行排序
        for (int i = 0; i < s.length(); i++) {
            if (chars[i] > 96) {
                chars2[s.length() - j-1] = chars[i];
                j++;
            } else {
                chars2[k] = chars[i];
                k++;
            }
        }
    
        //特殊情况,直接返回""
        if (k == 0 || k == s.length()) {
    
            //比较坑,单个字符返回字符本身
            if (s.length() == 1) {
                return s;
            }
    
            return "";
        }
        System.out.println(Arrays.toString(chars2));
        System.out.println(k);
        System.out.println(j - 1);
    
        /**
         * 对字符进行插入chars操作
         * 根据计数器的大小判断字符的位置
         * 大的在偶数位
         */
        if (j  < k) {
            for (int i = 0; i < s.length(); i++) {
                if (i % 2 == 0) {
                    chars[i] = chars2[i / 2];
                } else {
                    chars[i] = chars2[s.length() - 1 - i / 2];
                }
            }
        } else {
            for (int i = 0; i < s.length(); i++) {
                if (i % 2 == 0) {
                    chars[i] = chars2[s.length() - 1 - i / 2];
                } else {
                    chars[i] = chars2[i / 2];
    
                }
            }
        }
        System.out.println(Arrays.toString(chars));
    
        //输出格式
        StringBuilder sb = new StringBuilder();
        for (char x : chars) {
            sb.append(x);
        }
        return new String(sb);
    }
    }
  • 相关阅读:
    优秀大数据GitHub项目一览
    自定义组件-BreadcrumbTreeView 的使用
    IOS中的属性列表----Property List
    即时通讯之smack客户端配置
    Android studio 使用问题汇总
    触摸事件UITouch的应用
    Android界面设计之对话框——定制Toast、AlertDialog
    android_orm框架之greenDAO(一)
    火速提升Android仿真器的运行速度 ——仿真器Genymotion
    Android 中的缓存机制与实现
  • 原文地址:https://www.cnblogs.com/DemonQin/p/12741556.html
Copyright © 2020-2023  润新知