世界已冷酷至极, 让我们携手前行。
自助收录

2023年华为OD机考真题:获取最大软件版本号

算法刷题1年前 (2023)更新 江南白衣
290 0 0
2023年华为OD机考真题:获取最大软件版本号

全网最全面的华为OD机试真题汇总,100%原题题库,不需要开会员即可查看全部内容,更多考题请查看真题库。

真题库:https://www.yuque.com/codernav.com/od

题目:获取最大软件版本号
知识点:排序字符串
时间限制: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
说明:
主次相同,存在增量版本大于不存在
示例5
输入:
1.5.1-A
1.5.1-a
输出:
1.5.1-a
说明:
里程碑版本号,字符串比较a大于A
解题思路:
将输入的版本号转化为长度为4的字符串数组(没有值的用空字符代替)
前面两个字符直接转化为int类型进行比较;
第三个字符如果两个都有值,则转化为int进行比较;如果都为空,则表示相等;如果一个为空,则另一个为大;
第四个字符直接作为字符串进行比较。

代码实现:

package com.codernav.demo.hwod.exam;

import java.util.Scanner;

/**
 * @title 获取最大软件版本号
 * @Description Maven版本号定义,<主版本>.<次版本>.<增量版本>-<里程碑版本>
 * 举例3.1.4-beta 其中,主版本和次版本都是必须的,主版本,次版本,增量版本由多位数字组成,可能包含前导零,里程碑版本由字符串组成。
 * <主版本>.<次版本>.<增量版本>:基于数字比较
 * 里程碑版本:基于字符串比较,采用字典序
 * 比较版本号时,按从左到右的顺序依次比较。基于数字比较, 只需比较忽略任何前导零后的整数值 。
 * 输入2个版本号,输出最大版本号
 * @Author 开发者导航
 * @website https://codernav.com
 * @date 2023/5/13
 */
public class Main {

    public static void main(String[] args) {

        Scanner sc = new Scanner(System.in);
        // 注意,如果输入是多个测试用例,请通过while循环处理多个测试用例
        String a = sc.nextLine();
        String b = sc.nextLine();

        String[] splitA = a.split("\\.");
        String[] splitB = b.split("\\.");

        //先比较主次版本
        for (int i = 0; i < 2; i++) {
            int firstOneA = Integer.parseInt(splitA[i]);
            int firstOneB = Integer.parseInt(splitB[i]);
            if (firstOneA != firstOneB) {
                System.out.println(firstOneA > firstOneB ? a : b);
                return;
            }
        }

        //最后增量版本-里程碑版本
        if (splitA.length > 2 && splitB.length > 2) {
            //有增量版本
            String[] splitA2 = splitA[2].split("-");
            String[] splitB2 = splitB[2].split("-");
            int firstOneA = Integer.parseInt(splitA2[0]);
            int firstOneB = Integer.parseInt(splitB2[0]);
            //比较增量版本
            if (firstOneA != firstOneB) {
                System.out.println(firstOneA > firstOneB ? a : b);
                return;
            }
            if (splitA2.length == 2 && splitB2.length == 2) {
                //有里程碑版本
                System.out.println(splitA2[1].compareTo(splitB2[1]) >= 0 ? a : b);
            } else {
                System.out.println(splitA2.length >= splitB2.length ? a : b);
            }
        } else {
            System.out.println(splitA.length >= splitB.length ? a : b);
        }

    }
}
© 版权声明

相关文章

开发者导航新手教程

暂无评论

暂无评论...