华为OD机试:18 获取最大软件版本号

package a_od_test;

import java.util.Scanner;

/*
获取最大软件版本号
知识点排序字符串
时间限制:1s空间限制:256MB限定语言:不限
题目描述:
Maven)版本号定义,<主版本>,<次版本>.<增量版本>-<里程碑版本>
举例3.1.4-beta其中,主版本和次版本都是必须的,主版本,次版本,增量版本由多位数宁组成,可能包含前导零,里程碑版本由宁符串组成。<主版本>.<次版本>,<增量版本>:基于数宇比较
里程碑版本:基于字符串比较Q,采用字典序
比较版本号时,按从左到右的顺序依次比较。基于数宇比较,只需比较忽略任何前导零后的整数值。
输入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
说明:
主次相同,存在增量版本大于不存在示例5
输入:
1.5.1-A
1.5.1-a
输出:
1.5.1-a
说明:
里程碑版本号,字符串比较ā大于A
解题思路:
将输入的版本号转化为长度为4的字符韦数组(没有值的用空字符代替)前面两个字符直接转化为it类型进行比较;
第三个字符如果两个都有值,则转化为it进行比较;
如果都为空,则表示相等:如果一个为空,则另一个为大;
第四个字符直接作为字符串进行比较。
 */
public class Main18 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String version1 = sc.nextLine();
        String version2 = sc.nextLine();
        String[] line1 = version1.replaceAll("-", ".").split("\\.");
        String[] line2 = version2.replaceAll("-", ".").split("\\.");
        //找出小的数组长度
        int minLen = Math.min(line1.length, line2.length);
        boolean flag = false;
        for (int i = 0; i < minLen; i++) {
            if (i < 3) {
                int num1 = Integer.parseInt(line1[i]);
                int num2 = Integer.parseInt(line2[i]);
                //<主版本>.<次版本>,<增量版本>:基于数宇比较,忽略前导0
                if (num1 >= num2 && minLen == line2.length) {
                    flag = true;
                } else {
                    flag = false;
                }
            } else {
                //里程碑版本:基于字符串比较,采用字典序
                if (line1[i].compareTo(line2[i]) >= 0) {
                    flag = true;
                } else {
                    flag = false;
                }
            }
        }
        if (flag) {
            System.out.println(version1);
        } else {
            System.out.println(version2);
        }
    }
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值