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) {
    }
}

This problem is selected from LeetCode.

Solution

Convert the two version strings to multiple parts and convert the parts to values and compare them.

Be careful to some special cases such as: 0.0 is same to 0.0.0.0.

The solution below assumes that the next level is 0 if there are no more levels in the shorter version number.

public class Solution {
  public int compareVersion(String version1, String version2) {
    String [] part1 = version1.split("\\.");
    String [] part2 = version2.split("\\.");
    
    int maxLength = Math.max(part1.length, part2.length);
    for(int i=0; i < maxLength; i++) {
      int v1 = i>=part1.length? 0: Integer.parseInt(part1[i]);
      int v2 = i>=part2.length? 0: Integer.parseInt(part2[i]);
      if(v1 > v2) return 1;
      if(v1 < v2) return -1;
    }
    return 0;
  }
}

RelatedPost