题目描述:
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
import java.util.*;
public class Main {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
// 注意 hasNext 和 hasNextLine 的区别
String s1 = in.nextLine();
String s2 = in.nextLine();
String[] s1Split = getS(s1);
String[] s2Split = getS(s2);
if (comp(s1Split, s2Split) == 1) {
System.out.println(s1);
} else {
System.out.println(s2);
}
}
private static int comp(String[] s1Split, String[] s2Split) {
if (Integer.parseInt(s1Split[0]) > Integer.parseInt(s2Split[0])) {
return 1;
} else if (Integer.parseInt(s1Split[0]) < Integer.parseInt(s2Split[0])) {
return 2;
}
if (Integer.parseInt(s1Split[1]) > Integer.parseInt(s2Split[1])) {
return 1;
} else if (Integer.parseInt(s1Split[1]) < Integer.parseInt(s2Split[1])) {
return 2;
}
if (s1Split[2] == null && s2Split[2] == null) {
return 1;
} else if (s1Split[2] != null && s2Split[2] == null) {
return 1;
} else if (s1Split[2] == null && s2Split[2] != null) {
return 2;
} else if (Integer.parseInt(s1Split[2]) > Integer.parseInt(s2Split[2])) {
return 1;
} else if (Integer.parseInt(s1Split[2]) < Integer.parseInt(s2Split[2])) {
return 2;
}
if (s1Split[3] == null && s2Split[3] == null) {
return 1;
} else if (s1Split[3] != null && s2Split[3] == null) {
return 1;
} else if (s1Split[3] == null && s2Split[3] != null) {
return 2;
} else {
if (s1Split[3].compareTo(s2Split[3]) > 0) {
return 1;
} else if (s1Split[3].compareTo(s2Split[3]) < 0) {
return 2;
} else {
return 1;
}
}
}
private static String[] getS(String s1) {
String[] res = new String[4];
String[] split2 = s1.split("-");
String[] split = split2[0].split("\\.");
for (int i = 0; i < split.length; i++) {
res[i] = split[i];
}
StringBuilder sb = new StringBuilder();
for (int i = 1; i < split2.length; i++) {
sb.append(split2[i]).append("-");
}
if (sb.length() != 0) {
sb.deleteCharAt(sb.length() - 1);
res[3] = sb.toString();
}
return res;
}
}
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)
# print(list1, list2)
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
#include<iostream>
#include<vector>
#include<map>
#include<unordered_set>
using namespace std;
vector<int> parse(string s){
vector<int> ans;
string a="";
for(char r:s){
if(r!='.'){
a.push_back(r);
}else{
ans.push_back(stoi(a));
a="";
}
}
bool flag = false;
string b="";
for(auto r:a){
if(r!='-'){
b.push_back(r);
}else{
ans.push_back(stoi(b));
return ans;
b="";
}
}
ans.push_back(stoi(b));
return ans;
}
string getVersion(string& s){
string b;
for(auto r:s){
if(r!='-'){
b.push_back(r);
}else{
b="";
}
}
if(b==s) return "";
return b;
}
string getBigger(string& s1,string &s2){
vector<int> v1=parse(s1);
vector<int> v2=parse(s2);
int len = min(v1.size(),v2.size());
for(int i=0;i<len;i++){
if(v1[i]>v2[i]){
return s1;
}else if(v1[i]<v2[i]){
return s2;
}
}
if(v1.size()>v2.size()) return s1;
else if(v1.size()<v2.size()) return s2;
string version1 = getVersion(s1);
string version2 = getVersion(s2);
if(version1>=version2) return s1;
return s2;
}
int main(){
string data1;
char a;
while(cin.get(a)){
if(a=='\n') break;
data1.push_back(a);
}
string data2;
while(cin.get(a)){
if(a=='\n') break;
data2.push_back(a);
}
string ans = getBigger(data1,data2);
cout<<ans<<endl;
}