本题要求实现语义化版本号(SemVer)的比较器,找出列表中最大的版本号,同时需要处理格式合法性检查。
_、~-、+、. 开头或结尾当前有一组版本号列表信息,单个版本号格式为:Major.Minor.Patch-可选先行版+可选构建信息,具体字段如下:
Major.Minor.Patch:为三个非负整数,禁止前导零;. 和 -)组成;请实现语义化版本号比较器,对输入版本号字符串列表按下面规则处理,返回最大的版本号(若存在相等最大版本号,则返回第一个版本号),若存在不合规格式则返回空字符串。
优先级比较:从左至右比较 Major Minor Patch 数字大小,大的优先;若 Major Minor Patch 相同,则继续对比先行版信息(第一个 - 号为分隔符,有信息大于无信息);如果先行版信息相同,则对比构建信息(第一个 + 号为分隔符,有信息大于无信息);
先行版和构建信息如果包含符号 .,先按 . 切分然后逐一对比,切分后首个元素大的优先,如果首元素相同则比较第二个,依次类推;单个元素对比规则如下:
1<A<a)a-b < a-b-c)输入版本号列表长度在 [1,100] 之间,每个版本号字符串长度在 [0,1024] 之间,其中纯数字标识符的值在 [0,2^{31}-1] 之间,非纯数字标识符长度在 [0,1024] 之间。
先行版和构建信息输入保证:任意符号之间内容不为空,信息中可能出现 - 或 .,不出现 _、.(在特定上下文中)、~,不以符号开头或结尾,纯数字标识符无前导零;+ 最多出现一次;
返回最大的版本号字符串,若存在不合规格式则返回空字符串。
输入
["0.0.1","0.1.1","1.0.0"]
输出
"1.0.0"
说明
按顺序对比Major.Minor.Patch大小,1>0>0
输入
["1.0.0-alpha","1.0.0.alpha.alpha","1.0.0-alpha.beta"]
输出
"1.0.0-alpha.beta"
说明
先行版按照分隔符顺序对比每一部分的ASCII值,b>a
输入
["1.0.0_alpha","1.0.0.alpha","1.0.0~alpha"]
输出
""
说明
'_'、'.'、'~' 都属于非法内容
输入
["1.0.0-alpha+2025","1.0.0-alpha+2026"]
输出
"1.0.0-alpha+2026"
说明
2026>2025
Scan the QR code below with WeChat to sign in
First-time scan will create your account automatically
请使用微信扫描下方二维码完成注册