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;


    }
}

results matching ""

    No results matching ""