NC104 题解 | #比较版本号#
比较版本号
https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7
官方解法:双指针
import java.util.*;
public class Solution {
public int compare (String version1, String version2) {
// 两个版本号的长度
int n1 = version1.length();
int n2 = version2.length();
// 双指针
int i = 0, j = 0;
while (i < n1 || j < n2) { //直到某个字符串结束
long num1 = 0;
//从下一个点前截取数字,每次比较ver1和ver2每个段的值的大小
while (i < n1 && version1.charAt(i) != '.') {
// 因为每次只比较一个段(也就是点之前),所以这样处理可以解决前导0的问题,因为前导0*10还是等于0
num1 = num1 * 10 + (version1.charAt(i) - '0');
i++;
}
//跳过点
i++;
long num2 = 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;
}
}
