【leetcode】165.(Medium)Compare Version Numbers
解题思路:
一个字符串两个指针
最初的做法:
class Solution {
public int compareVersion(String version1, String version2) {
if(version1==null||version2==null) return 0;
int len1=version1.length();
int len2=version2.length();
int p11=0,p12=0,p21=0,p22=0;
int num1,num2;
String str1,str2;
while(p12<len1&&p22<len2) {
while(p12<len1&&version1.charAt(p12)!='.')
p12++;
while(p22<len2&&version2.charAt(p22)!='.')
p22++;
str1=version1.substring(p11,p12);
str2=version2.substring(p21,p22);
num1=Integer.valueOf(str1);
num2=Integer.valueOf(str2);
if(num1>num2) return 1;
else if(num1<num2) return -1;
p12++;p22++;p11=p12;p21=p22;
}
while(p12<len1) {
while(p12<len1&&version1.charAt(p12)!='.')
p12++;
str1=version1.substring(p11,p12);
num1=Integer.valueOf(str1);
if(num1>0) return 1;
p12++;p11=p12;
}
while(p22<len2){
while(p22<len2&&version2.charAt(p22)!='.')
p22++;
str2=version2.substring(p21,p22);
num2=Integer.valueOf(str2);
if(num2>0) return -1;
p22++;p21=p22;
}
return 0;
}
}
运行结果:
讨论区有一种正则表达式的做法:
class Solution {
public int compareVersion(String version1, String version2) {
String[] levels1 = version1.split("\\.");
String[] levels2 = version2.split("\\.");
int length = Math.max(levels1.length, levels2.length);
for (int i=0; i<length; i++) {
Integer v1 = i < levels1.length ? Integer.parseInt(levels1[i]) : 0;
Integer v2 = i < levels2.length ? Integer.parseInt(levels2[i]) : 0;
int compare = v1.compareTo(v2);
if (compare != 0) {
return compare;
}
}
return 0;
}
}
运行结果: