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