题目描述:
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嵌套
#华为机试,emo了#
#优化版本,不知道性能,但看着简洁了。之前不知道怎么创建的空列表也知道怎么写了,还是有进步的
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])