首页 > 试题广场 >

重排字符串和数字

[编程题]重排字符串和数字
  • 热度指数:2761 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 256M,其他语言512M
  • 算法知识视频讲解
对于给定的一个包含连续字母、连续数字及空格的字符串(不会出现字母和数字连在一起出现),实现字母部分按出现顺序排列而数字按照从小到达顺序排在最后一个字母的后面。

数据范围: 字符串长度满足
进阶:空间复杂度 , 时间复杂度
示例1

输入

"xb 1 cc 5 dd 10 ee 2"

输出

"xb cc dd ee 1 2 5 10"
示例2

输入

""

输出

""
一定要切记优先队列的类型设置为long而不是int,否则无法通过最后一个测试用例。
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     *
     * @param text_source string字符串 原始输入
     * @return string字符串
     */
    public static String char_and_num_return (String text_source) {
        if (text_source.equals("")) {
            return "";
        }
        String[] str = text_source.split(" ");
        StringBuilder sb = new StringBuilder();
        PriorityQueue<Long> queue = new PriorityQueue<>();
        for (int i = 0; i < str.length; i++) {
            if (str[i].charAt(0) > 89) {
                sb.append(str[i]).append(" ");
            } else {
                queue.add(Long.parseLong(str[i]));
            }
        }
        while (!queue.isEmpty()) {
            sb.append(queue.peek()).append(" ");
            queue.poll();
        }
        text_source = sb.substring(0, sb.length() - 1);
        return text_source;
    }
}

发表于 2024-08-27 17:49:59 回复(0)
根据字母和数字指定不同的排序规则,利用Arrays.sort()排序
import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 
     * @param text_source string字符串 原始输入
     * @return string字符串
     */
    public String char_and_num_return (String text_source) {
        //先把String转成String数组
        String[] s = text_source.split(" ");
        Arrays.sort(s, (a, b) -> {
           if(isString(a) && isString(b)) {
               return 0;
           } else if(isString(a) && !isString(b)) {
               return -1;
           } else if(!isString(a) && isString(b)) {
               return 1;
           } else {
               return (int)(Long.valueOf(a) - Long.valueOf(b));
           }
        });
        StringBuilder res = new StringBuilder();
        for(String item : s) {
            res.append(item).append(" ");
        }
        return res.toString().trim();
    }
    
    boolean isString(String c) {
        return c.charAt(0) > 57;
    }
}


发表于 2021-12-12 22:34:45 回复(0)