目录
- 一、题目描述
- 二、输入描述
- 三、输出描述
- 四、补充说明
- 五、解题思路
- 六、Python算法源码
- 七、效果展示
- 1、输入
- 2、输出
一、题目描述
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
五、解题思路
- 首先读取输入的两个版本号字符串 line1 和 line2;
- 使用正则表达式 “.” 将版本号字符串分割成数组;
- 获取分割后的数组的长度,分别记为 len1 和 len2;
- 将两个版本号的长度进行比较,取较小的长度作为循环次数,记为 len;
- 在循环中,依次比较对应位置的版本号值:
- 获取当前位置的版本号值,调用 getValue 方法;
- 如果两个版本号值相等,则继续比较下一个位置;
- 如果第一个版本号值大于第二个版本号值,则输出第一个版本号并返回;
- 如果第二个版本号值大于第一个版本号值,则输出第二个版本号并返回;
- 如果循环结束后,两个版本号的前缀部分完全相等,则根据长度比较输出较长的版本号;
- 如果第一个版本号的长度大于等于第二个版本号的长度,则输出第一个版本号;
- 如果第二个版本号的长度大于第一个版本号的长度,则输出第二个版本号;
六、Python算法源码
import re
def split(v):
list1 = re.split('[.-]', v)
for i in range(len(list1)):
if i < 3:
if list1[i] == '0':
list1[i] = 0
else:
list1[i] = int(list1[i].lstrip('0'))
return list1
v1 = input()
v2 = input()
list1 = split(v1)
list2 = split(v2)
i = 0
l1 = len(list1)
l2 = len(list2)
for i in range(4):
if l1 < i + 1 or l2 < i + 1:
if l1 != l2:
max_v = v1 if l1 > l2 else v2
print(max_v)
else:
print(v1)
break
if list1[i] > list2[i]:
print(v1)
break
elif list1[i] < list2[i]:
print(v2)
break
七、效果展示
1、输入
2.2.5-S1
2.2.5-S2
2、输出
2.2.5-S2
🏆下一篇:华为OD机试真题 Python 实现【相对开音节】【2022Q4 100分】,附详细解题思路
🏆本文收录于,华为OD机试(Python)真题(A卷+B卷)
每一题都有详细的答题思路、详细的代码注释、样例测试,订阅后,专栏内的文章都可看,可加入华为OD刷题群(私信即可),发现新题目,随时更新,全天CSDN在线答疑。