AC clean Java two pointers solution, no split( )


  • 0
    public int compareVersion(String version1, String version2) {
      char[] c1 = version1.toCharArray();
      char[] c2 = version2.toCharArray();
      
      int i = 0, j = 0, v1 = 0, v2 = 0, n1 = c1.length, n2 = c2.length;
      
      while (i < n1 && j < n2) {
          // get version number v1 and v2
          while (i < n1 && Character.isDigit(c1[i])) 
            v1 = v1 * 10 + c1[i++] - '0';
          
          while (j < n2 && Character.isDigit(c2[j])) 
            v2 = v2 * 10 + c2[j++] - '0';
          
          if (v1 > v2) return 1;
          if (v2 > v1) return -1;
          
          // reset version numbers
          v1 = 0; v2 = 0;
          
          // skip '.'
          i++; j++;
      }
      
      // final check for extra digits in either version 1 or version 2
      // e.g. "1.0" and "1"
      while (i < n1 && Character.isDigit(c1[i])) 
        v1 = v1 * 10 + c1[i++] - '0';
      
      while (j < n2 && Character.isDigit(c2[j])) 
        v2 = v2 * 10 + c2[j++] - '0';
      
      if (v1 > v2) return 1;
      if (v1 < v2) return -1;
      
      return 0;
    }

Log in to reply
 

Looks like your connection to LeetCode Discuss was lost, please wait while we try to reconnect.