version at: 2022-4-7
/**
1. 先按点拆分, 判断长度相当的部分谁大谁小;
2. 如果一个version更长, 判断剩下的部分是不是0;
3. 注意String.split 的input 是正则表达式, 所以要用"\\."
*/
class Solution {
public int compareVersion(String version1, String version2) {
String SPLITOR = "\\.";
String[] v1 = version1.split(SPLITOR);
String[] v2 = version2.split(SPLITOR);
int n = Math.min(v1.length, v2.length);
for (int i = 0; i < n; i++) {
int diff = Integer.parseInt(v1[i]) - Integer.parseInt(v2[i]);
if (diff > 0) return 1;
if (diff < 0) return -1;
}
int m = Math.max(v1.length, v2.length);
for (int i = n; i < m ;i++) {
if (i < v1.length && Integer.parseInt(v1[i]) != 0) return 1;
if (i < v2.length && Integer.parseInt(v2[i]) != 0) return -1;
}
return 0;
}
}
/*
1. 可以按. 分割成多个给定顺序的数
2.1 长度相等且顺序在前的数较大的version较大
2.2 长度不等且前缀相等且较长的数都不为0时较大
2.3 长度相等且对于数相等的version相等
2.4 长度不等的version,前缀相等且较长的数都为0时相等
2.5 否则较小
3.testcase: 1 vs 2 ; 1.1 vs 1.1.2 ,
*/
class Solution {
public int compareVersion(String version1, String version2) {
String[] vs1 = version1.split("[.]");
String[] vs2 = version2.split("[.]");
int i = 0 , j = 0;
while(i < vs1.length && j < vs2.length){
int v1 = Integer.parseInt(vs1[i++]);
int v2 = Integer.parseInt(vs2[j++]);
if (v1 > v2) return 1;
if (v1 < v2) return -1;
}
while(i < vs1.length){
if (Integer.parseInt(vs1[i++]) != 0) return 1;
}
while(j < vs2.length){
if (Integer.parseInt(vs2[j++]) != 0) return -1;
}
return 0;
}
}