华为OD题目: 获取最大软件版本号

该程序用于比较两个Maven版本号,按照主版本、次版本、增量版本和里程碑版本的规则进行字典序和数字比较,输出较大的版本号。
摘要由CSDN通过智能技术生成
package com.sf.ccmas.video.config.odd.od18;

import java.util.Arrays;
import java.util.Scanner;

/**
 * 获取最大软件版本号
 * 知识点排序字符串
 * 时间限制:1s 空间限制: 256MB 限定语言:不限
 * 题目描述:
 * Maven版本号定义,<主版本>.<次版本><增量版本>-<里程碑版本>
 * 举例3.1.4-beta 其中,主版本和次版本都是必须的,主版本,次版本,增量版本由多位数字组成,可能包含前导零,里程碑版本由字符串组成。
 * <主版本>.<次版本>增量版本>:基于数字比较
 * 里程碑版本:基于字符串比较,采用字典序
 * 比较版本号时,按从左到右的顺序依次比较。基于数字比较,只需比较忽略任何前导零后的整数值
 * 输入2个版本号,输出最大版本号
 *
 * 输入描述
 * 输入2个版本号,换行分割,每个版本的最大长度小于50
 * 输出描述:
 * 版本号相同时输出第一个输入版本号
 * 补充说明:
 * 主版本,次版本,增量版本:
 * 基于字符串比较,比如
 * 1.5>1.4>1.3.11>1.3.9
 * 里程碑版本:基于字符串比较 比如
 * 1.2-beta-3>1.2-beta-11
 *
 * 示例1输入:
 * 2.5.1-C
 * 1.4.2-D
 * 输出:
 * 2.5.1-C
 * 说明:
 * 主版本,数字2大于1
 *
 * 示例2
 * 输入:
 * 1.3.11-S2
 * 1.3.11-S13
 * 输出:
 * 1.3.11-S2
 * 说明:
 * 里程碑版本,S2大于S13
 *
 * 示例3
 * 输入:
 * 1.05.1
 * 1.5.01
 * 输出:
 * 1.05.1
 * 说明:
 * 版本号相同,输出第一个版本号
 *
 * 示例4
 * 输入:
 * 1.5
 * 1.5.0
 * 输出:
 * 1.5.0
 * 说明:
 * 主次相同,存在增量版本大于不存在
 *
 * 解题思路: 逐个比较各个版本段的值,输出版本大的
 * 如果,最终数字是相同的
 * 如果主次相同,存在增量版本大于不存在, 输出增量的
 * 版本号相同时输出第一个输入版本号
 *
 */

public class Main {
    public static void main(String[] args) {
//        String aa = "1.5.0";
//        String[] strings = aa.split("\\.");
//        System.out.println(Arrays.asList(strings));


        Scanner sc = new Scanner(System.in);
        String line1 = sc.nextLine();
        String line2 = sc.nextLine();
        String[] v1Arr = line1.split("\\.");
        int len1 = v1Arr.length;

        String[] v2Arr = line2.split("\\.");
        int len2 = v2Arr.length;

        int len = Math.min(len1, len2);
        for (int i = 0; i < len; i++) {
            int intV1 = getIntVal(v1Arr[0]);
            int intV2 = getIntVal(v2Arr[0]);
            if (intV1 == intV2) {
                continue;
            }
            if (intV1 > intV2) {
                System.out.println(line1);
            }else {
                System.out.println(line2);
            }
            return;
        }
        //如果走到这里,说明数字版本号相同,如果主次相同,存在增量版本大于不存在, 版本号相同时输出第一个输入版本号
        if (len1 >= len2) {
            System.out.println(line1);
        } else {
            System.out.println(line2);
        }



    }


    //根据传入的版本段的字符串,获取一个int值,如果都是0,比如000,返回0;001返回1
    public static int getIntVal(String val) {
        //先比较主版本,先剔除掉前导0
        boolean hasZero = val.contains("0");
        int notZeroIndex = -1;
        if (hasZero) {
            char[] array = val.toCharArray();
            for (int i = 0; i < array.length; i++) {
                if (array[i] == 0) {
                    continue;
                }else {
                    //找到不为0的下标,立马退出
                    notZeroIndex = i;
                    break;
                }
            }
        }
        int num;
        //如果还是-1,则说明都是0
        if (notZeroIndex == -1) {
            num = 0;
        }else {
            String substring = val.substring(notZeroIndex);
            num = Integer.parseInt(substring);
        }
        return num;
    }



}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值