华为机试(JAVA)真题Od-字符串重新排序

 题目链接:

https://renjie.blog.csdn.net/article/details/127947829

java代码://通过重写Comparator接口里面的compare方法来实现

package com.company;

import java.util.*;

public class Mian2023020702 {
    public  static void main(String[] args){
        Scanner in =new Scanner(System.in);

        String str=in.nextLine();

        String[] data=str.split(" ");

        List<String> lists=new ArrayList<>();
        for(int i=0;i<data.length;i++){
            lists.add(toSortStr(data[i]));
        }

        //次数和单词长度对应排序
        Collections.sort(lists, new Comparator<String>() {
            @Override
            public int compare(String o1, String o2) {
                //次数
                int n=allNum(lists,o2)-allNum(lists,o1);
                //长度
                int n1=o1.length()-o2.length();
                if(n==0 && n1==0){
                    return comAdict(o1,o2);
                }else if(n==0 && n1!=0){
                    return n1;
                }else {
                    return n;
                }

            }
        });



        for(String k:lists){
            if(!lists.get(lists.size()-1).equals(k)){
                System.out.print(k+" ");
            }else {
                System.out.println(k);
            }
        }

    }

    //字符串按字典排序
    static  String toSortStr(String str){
        String[] data=str.split("");
        Arrays.sort(data);

        String str1="";
        for(int i=0;i<data.length;i++){
            str1=str1+data[i];
        }
        return str1;
    }

    //统计data中字符串得次数
    static int allNum(List<String> lists,String str){
        int count=0;
        for(int i=0;i<lists.size();i++){
            if(lists.get(i).equals(str)){
                count++;
            }
        }
        return count;
    }

    //按字典比较
    static int comAdict(String str,String str1){

        for(int i=0;i<str.length();i++){
            if(str.charAt(i)!=str1.charAt(i)){
                return (int)str.charAt(i)-(int)str1.charAt(i);
            }
        }
        return 0;
    }


}

代码如果存在逻辑问题,欢迎指正~

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值