🌕 165. 比较版本号
2022年10月10日
- algorithm
🌕 165. 比较版本号
难度: 🌕
问题描述
解法
public int compareVersion(String version1, String version2) {
// 思路:
// 以 . 分割,获取修订号,比较大小
int m = version1.length();
int n = version2.length();
int a = 0;
int b = 0;
int left = -1;
int right = -1;
while(a < m && b < n) {
// a 为左边界,找到第一个非 0 值
while(a < m && version1.charAt(a) == '0') {
a ++;
}
if(a == m) {
break;
}
int ar = -1;
if(version1.charAt(a) == '.') { // 说明 . 之前全部为 0
left = 0;
ar = a;
} else {
// a 为左边界,找到对应右边界
ar = a + 1;
while(ar < m && version1.charAt(ar) != '.') {
ar ++;
}
// [a, ar - 1]
left = Integer.parseInt(version1.substring(a, ar));
}
while(b < n && version2.charAt(b) == '0') {
b ++;
}
if(b == n) {
break;
}
int br = -1;
if(version2.charAt(b) == '.') {
right = 0;
br = b;
} else {
br = b + 1;
while(br < n && version2.charAt(br) != '.') {
br ++;
}
right = Integer.parseInt(version2.substring(b, br));
}
// System.out.println(left + " " + right + " " + b + " " + br);
if(left < right) {
return -1;
} else if(left > right) {
return 1;
} else {
a = ar + 1;
b = br + 1;
}
}
while(a < m) {
// 说明 version2 已经全部遍历完,version2 该位 == 0
while(a < m && (version1.charAt(a) <= '0' || version1.charAt(a) > '9')) {
a ++;
}
if(a == m) {
return 0;
} else {
// 遇到了一个 1
return 1;
}
}
while(b < n) {
while(b < n && (version2.charAt(b) <= '0' || version2.charAt(b) > '9')) {
b ++;
}
if(b == n) {
return 0;
} else {
return -1;
}
}
return 0;
}
}