力扣: 937. 重新排列日志文件



import java.util.*;

/**
 * @author xnl
 * @Description:
 * @date: 2022/7/3   0:13
 */
public class Solution {
    public static void main(String[] args) {
        Solution solution = new Solution();
        String[] str = {"dig1 8 1 5 1","let1 art can","dig2 3 6","let2 own kit dig","let3 art zero"};
        System.out.println(Arrays.toString(solution.reorderLogFiles(str)));
    }

    /**
     * 使用lambda表达式
     * @param logs
     * @return
     */
    public String[] reorderLogFiles2(String[] logs) {
        Arrays.sort(logs, new Comparator<String>() {
            @Override
            public int compare(String x, String y) {
                String[] splitX = x.split(" ", 2);
                String[] splitY = y.split(" ", 2);
                // 判断是否是数字
                boolean digitX = Character.isDigit(splitX[1].charAt(0));
                boolean digitY = Character.isDigit(splitY[1].charAt(0));
                 // 如果两个都是数字的话
                if (digitX && digitY){
                    return 0;
                }
                // 如果两个都是字符的话
                if (!digitX && !digitY){
                    int c = splitX[1].compareTo(splitY[1]);
                    if (c != 0){
                        return c;
                    }
                    // 如果两个字符相等,比较两个字符的首字母大小
                    return splitX[0].compareTo(splitY[0]);
                }
                return digitX ? 1 : -1;
            }
        });
        return logs;
    }

    /**
     * 使用类的方式进行比较
     * @param logs
     * @return
     */
    public String[] reorderLogFiles(String[] logs) {
        int length = logs.length;
        Pair[] pairs = new Pair[length];
        for (int i = 0; i < length; i++){
            pairs[i] = new Pair(logs[i], i);
        }

        Arrays.sort(pairs, (a ,b) -> compare(a , b));
        String[] res = new String[length];
        for (int i = 0; i < length; i++){
            res[i] = pairs[i].log;
        }
        return res;
    }

    public int compare(Pair pair1, Pair pair2){
        String log1 = pair1.log, log2 = pair2.log;
        int index1 = pair1.index, index2 = pair2.index;
        String[] split1 = log1.split(" ", 2);
        String[] split2 = log2.split(" ", 2);
        boolean x = Character.isDigit(split1[1].charAt(0));
        boolean y = Character.isDigit(split2[1].charAt(0));
        // 如果都是数字
        if (x && y){
            return index1 - index2;
        }

        // 如果都是字母
        if (!x && !y){
            int sc = split1[1].compareTo(split2[1]);
            if (sc != 0){
                return sc;
            }
            return split1[0].compareTo(split2[0]);
        }
        return x ? 1 : -1;
    }

    class Pair{
        String log;
        int index;
        public Pair(String log, int index) {
            this.log = log;
            this.index = index;
        }
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值