记笔试算法题

这篇博客探讨了如何从字符串中找出最大数字以及如何比较版本号。第一部分介绍了一个使用ASCII码比较字符串中最大数字的方法,通过将字符串转为byte数组并遍历找到最大值。第二部分讲解了版本号比较的实现,涉及字符串分割、字节比较以及处理不同长度的版本号。
摘要由CSDN通过智能技术生成

第一题:

        有一串字符串 求出当中最大的数字:

                      如: “asd446sd2146asd" 求出当中最大数字——6。

        看到这题的我想法就是用ASCLL吗但是一下子不晓得用什么方法转型(主要是当时脑子懵懵,后面笔试完反应过来怎么做了)。

直接 把String转byte类型数组就可以了,自然会转换成ASCLL吗,最后比较然后—48就行了

 String s = "sdasd546sdas0";
        byte[] bytes = s.getBytes(StandardCharsets.UTF_8);
        byte flag = 0;
        for (byte aByte : bytes) {
            if (48 <= aByte && aByte <=57){
                if (aByte > flag){
                    flag = aByte;
                }
            }
        }
        System.out.println(flag-48);

第二题(这题的解我感觉我写的有问题,应该有别的调优方法)

(有一个注意点就是Spring没办法直接用 ”.“ 切割,需要转义,因为.是特殊字符  )

        比较版本号:如 1.236.25 > 1.212.15.32

    public String  test() {
       String s1 = "1.325.21.32";
       String s2 = "1.325.212";
        String[] sR1 = s1.split("\\.");
        String[] sR2 = s2.split("\\.");
        int length = sR1.length;
        if (sR2.length < length){
            length = sR2.length;
        }
        for (int i = 0; i < length; i++) {
            int flag = compare(sR1[i],sR2[i]);
            if ( flag == -1 ){
                return s1;
            } else if ( flag == 1 ){
                return s2;
            }
        }
        if (sR1.length > sR2.length){
            return s1;
        }else if (sR1.length < sR2.length){
            return s2;
        }
        return "0";
    }

    //-1表示 s1 > s2
    //0表示 s1 = s2
    //1表示 s1 < s2
    public int compare(String s1, String s2){
        byte[] b1 = s1.getBytes();
        byte[] b2 = s2.getBytes();
        int length = b1.length;
        if (length > b2.length){
            length = b2.length;
        }
        for (int i = 0; i < length; i++) {
            if (b1[i] > b2[i]){
                return -1;
            } else if (b1[i] < b2[i]){
                return 1;
            }
        }
        if (b1.length > b2.length){
            return -1;
        }else if (b1.length < b2.length){
            return 1;
        }
        return 0;
    }

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值