全网最全面的华为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); } } }