import java.util.*; public class Solution { /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * 比较版本号 * @param version1 string字符串 * @param version2 string字符串 * @return int整型 */ public int compare (String version1, String version2) { //先将版本字符串按照 “.”分割 String[] arr1 = version1.split("\\.") ; String[] arr2 = version2.split("\\.") ; int i = 0 ; int j = 0 ; //然后逐一比较每一段的大小 while(i < arr1.length && j < arr2.length) { if(cmpStrNum(arr1[i],arr2[j]) > 0) { return 1 ; } else if(cmpStrNum(arr1[i],arr2[j]) < 0) { return -1 ; } i++ ; j++ ; } if(i == arr1.length && j == arr2.length) { return 0 ; } else if(i == arr1.length) {//注意:有可能某一方的后续修订号全是0,因此需要继续判断 while(j < arr2.length) { if(!isZeroStr(arr2[j])) { return -1 ; } j++ ; } return 0 ; } else { while(i < arr1.length) { if(!isZeroStr(arr1[i])) { return 1 ; } i++ ; } return 0 ; } } //比较两个字符串代表的数字的 大小 //s1>s2返回1 ;s1 < s2返回-1 ;s1=s2返回0 public int cmpStrNum(String s1 , String s2) { char[] a1 = s1.toCharArray() ; char[] a2 = s2.toCharArray() ; //分别去除s1,s2的前导零 int i1 = 0 ; while(i1 < a1.length && a1[i1] == '0') { i1 ++ ; } int i2 = 0 ; while(i2 < a2.length && a2[i2] == '0') { i2 ++ ; } //若存在两串或某一个串全为0则可以直接比较出大小 if(i1 == a1.length && i2 == a2.length) { return 0 ; } else if (i1 == a1.length) { return -1 ; } else if(i2 == a2.length) { return 1 ; } else {//有效数字的起点 //先比较长度(长的肯定大)0,1,2,3 if(a1.length-i1 > a2.length-i2) { return 1 ; } else if(a1.length-i1 > a2.length-i2) { return -1 ; } else { //长度一样再逐位比较 while(i1 < a1.length && i2 < a2.length) { if(a1[i1] > a2[i2]) { return 1 ; } else if(a1[i1] < a2[i2]) { return -1 ; } i1++ ; i2++ ; } return 0 ; } } } //判断是不是 “零串” public boolean isZeroStr(String str) { for(int i = 0 ; i < str.length() ; i ++) { if(str.charAt(i) != '0') { return false ; } } return true ; } }