当前位置: 首页 > 面试经验 >

【华为OD机试2023】获取最大软件版本号(Python)

优质
小牛编辑
117浏览
2023-03-28

【华为OD机试2023】获取最大软件版本号(Python)

题目描述:

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

解题思路:

本题重点

①设一个列表,用于存储拆分后的字符(基础不牢地动山摇,我在这点翻车了好久,不知道有没有办法快速初始化一个列表a,a有两个列表元素b、c,b和c各有4个空列表元素,有知道的大佬请教教我)

②按序拆分输入的版本号——首先看有没有里程碑版本,判断有没有'-'即可,如果有,拆出——再拆出主版本——再判断有没有增量版本,看拆剩下的字符串里有没有'.'即可——拆出次版本和可能有的增量版本

③对主版本、次版本、增量版本整型化,比较大小;里程碑版本则根据字符串比大小

④各种if嵌套


#优化版本,不知道性能,但看着简洁了。之前不知道怎么创建的空列表也知道怎么写了,还是有进步的
ss=[input() for i in range(2)]
banben=[[[] for j in range(4)] for i in range(2)]
for i,s in enumerate(ss):
if len(s.split('-'))>1:
banben[i][3]=s.split('-')[1]
if len(s.split('-')[0].split('.'))>2:
banben[i][2]=s.split('-')[0].split('.')[2]
banben[i][0]=s.split('-')[0].split('.')[0]
banben[i][1] = s.split('-')[0].split('.')[1]
big=sorted(banben,key=lambda x:(int(x[0]),int(x[1]),int(x[2]),[x[3]]),reverse=True)[0]
print(ss[banben.index(big)])






#旧版本
all=[input() for i in range(2)]
bb=[[0,0,0,0],[0,0,0,0]]
for i,value in enumerate(all):
bb[i][3] = value.split('-',1)[1] if '-' in value else []
bb[i][0]=int(value.split('-', 1)[0].split('.',1)[0])
if '.' in value.split('-', 1)[0].split('.',1)[1]:
bb[i][1]=int(value.split('-', 1)[0].split('.',1)[1].split('.')[0])
bb[i][2]=int(value.split('-', 1)[0].split('.',1)[1].split('.')[1])
else:
bb[i][1]=int(value.split('-', 1)[0].split('.')[1])
bb[i][2] =[]

if bb[0][0]>bb[1][0]:
print(all[0])
elif bb[0][0]<bb[1][0]:
print(all[1])
else:
if bb[0][1]>bb[1][1]:
print(all[0])
elif bb[0][1] < bb[1][1]:
print(all[1])
else:
if bb[0][2]==[] and bb[1][2] !=[]:
print(all[1])
elif bb[0][2]!=[] and bb[1][2]==[]:
print(all[0])
elif bb[0][2]==bb[1][2] or (bb[0][2]==[] and bb[1][2]==[]):
if bb[0][3]<bb[1][3]:
print(all[1])
else:
print(all[0])
else:
if bb[0][2]>=bb[1][2]:
print(all[0])
else:
print(all[1])

#华为机试,emo了#
 类似资料: