一.双指针遍历截取
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 比较版本号* @param version1 string字符串 * @param version2 string字符串 * @return int整型*/public int compare (String version1, String version2) {// write code here/*** 第二个大,返回-1,* 第一个大,返回1*/if (version1 == null) return -1;if (version2 == null) return 1;//记录两个字符串的大小int n1 = version1.length();int n2 = version2.length();//定义双指针遍历字符串int i = 0,j = 0;while (i < n1 || j < n2) {//用long防止溢出long num1 = 0;//把多余的0减掉while (i < n1 && version1.charAt(i) != '.') {num1 = num1 * 10 + (version1.charAt(i) - '0');i++;}//跳过字符‘.’i++;//用long防止溢出long num2 = 0;//把多余的0减掉while (j < n2 && version2.charAt(j) != '.') {num2 = num2 * 10 + (version2.charAt(j) - '0');j++;}//跳过字符‘.’j++;//判断谁大if (num1 > num2) return 1;if (num1 < num2) return -1;}return 0;}
}
二.分割截取
import java.util.*;public class Solution {/*** 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可** 比较版本号* @param version1 string字符串 * @param version2 string字符串 * @return int整型*/public int compare (String version1, String version2) {// write code hereif (version1 == null) return -1;if (version2 == null) return 1;/*** 以点为分割符*/String[] s1 = version1.split("\\.");String[] s2 = version2.split("\\.");//遍历字符串数组for (int i = 0; i < s1.length || i < s2.length; i++) {//小的版本号后末尾全部补0String str1 = i < s1.length ? s1[i]:"0";String str2 = i < s2.length ? s2[i]:"0";//用long防止溢出long num1 = 0;for (int j = 0; j < str1.length(); j++) {num1 = num1 * 10 + (str1.charAt(j) - '0');}long num2 = 0;for (int j = 0; j < str2.length(); j++) {num2 = num2 * 10 + (str2.charAt(j) - '0');}if (num1 > num2) return 1;if (num1 < num2) return -1;}return 0;}
}