重庆疫情今日最新消息/百度seo找哪里
题目
165. 比较版本号【中等】
题解
字符串分割
感觉其实主要依靠的是split()方法分割字符串,且自动去除了前导0,之后就逐个字符比较大小即可
class Solution {public int compareVersion(String version1, String version2) {String[] v1=version1.split("\\.");//"."是特殊字符,需要转义String[] v2=version2.split("\\.");int m=v1.length,n=v2.length;for(int i=0;i<m||i<n;i++){int x=i<m?Integer.parseInt(v1[i]):0;int y=i<n?Integer.parseInt(v2[i]):0;if(x<y) return -1;else if(x>y) return 1;}return 0;}
}
时间复杂度:O(m+n)O(m+n)O(m+n)
空间复杂度:O(m+n)O(m+n)O(m+n),存储分割后的字符串
双指针
优化空间复杂度,直接分析字符串,不需要将它分割了
将修订号里的字符串转化为整型数字,进行比较
class Solution {public int compareVersion(String version1, String version2) {int m=version1.length(),n=version2.length();int i=0,j=0;while(i<m||j<n){int x=0,y=0;for(;i<m&&version1.charAt(i)!='.';i++)x=x*10+version1.charAt(i)-'0';//字符串转数字i++;//跳过"."for(;j<n&&version2.charAt(j)!='.';j++)y=y*10+version2.charAt(j)-'0';j++;if(x!=y)return x<y?-1:1;}return 0;}
}
时间复杂度:O(m+n)O(m+n)O(m+n)
空间复杂度:O(1)O(1)O(1)