165. Compare Version Numbers
Compare two version numbers version1 and version2.
If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.
You may assume that the version strings are non-empty and contain only digits and the . character.
The . character does not represent a decimal point and is used to separate number sequences.
For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.
Here is an example of version numbers ordering:
0.1 < 1.1 < 1.2 < 13.37
public class Solution {
public int compareVersion(String version1, String version2) {
String[] v1 = version1.split("\\.");
String[] v2 = version2.split("\\.");
Comparator<String> comp = new Comparator<String>(){
@Override
public int compare(String s1, String s2){
int p = 0;
int q = 0;
while(p < s1.length() && s1.charAt(p) == '0') p++;
while(q < s2.length() && s2.charAt(q) == '0') q++;
if(p >= s1.length() && q >= s2.length()) return 0;
else if(p >= s1.length() || q >= s2.length()){
if(p >= s1.length()) return -1;
else return 1;
}else{
String ss1 = s1.substring(p);
String ss2 = s2.substring(q);
if(ss1.length() > ss2.length()) return 1;
else if(ss1.length() < ss2.length()) return -1;
else return ss1.compareTo(ss2);
}
}
};
int i =0;
for(; i< v1.length || i<v2.length; i++){
String vs1 = i< v1.length ? v1[i] : "";
String vs2 = i< v2.length ? v2[i] : "";
int res = Objects.compare(vs1, vs2, comp);
if(res != 0) return res > 0 ? 1 : -1;
}
return 0;
}
}