字符串165. 比较版本号
Posted ocpc
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了字符串165. 比较版本号相关的知识,希望对你有一定的参考价值。
题目:
解答:
方法一:分割+解析,两次遍历,线性空间。
第一个想法是将两个字符串按点字符分割成块,然后逐个比较这些块。
如果两个版本号的块数相同,则可以有效工作。如果不同,则需要在较短字符串末尾补充相应的 .0
块数使得块数相同。
算法:
(1)根据点分割两个字符串将分割的结果存储到数组中。
(2)遍历较长数组并逐个比较块。如果其中一个数组结束了,实际上可以根据需要添加尽可能多的零,以继续与较长的数组进行比较。
A. 如果两个版本号不同,则返回 1 或 -1。
(3)版本号相同,返回 0。
1 class Solution { 2 public int compareVersion(String version1, String version2) { 3 String[] nums1 = version1.split("\."); 4 String[] nums2 = version2.split("\."); 5 int n1 = nums1.length, n2 = nums2.length; 6 7 // compare versions 8 int i1, i2; 9 for (int i = 0; i < Math.max(n1, n2); ++i) { 10 i1 = i < n1 ? Integer.parseInt(nums1[i]) : 0; 11 i2 = i < n2 ? Integer.parseInt(nums2[i]) : 0; 12 if (i1 != i2) { 13 return i1 > i2 ? 1 : -1; 14 } 15 } 16 // the versions are equal 17 return 0; 18 } 19 };
方法二:双指针
1 class Solution { 2 public: 3 int compareVersion(string version1, string version2) 4 { 5 int p1 = 0, p2 = 0; 6 int end = max(version1.size(), version2.size()); 7 8 while (p1 < end || p2 < end) 9 { 10 int v1 = 0, v2 = 0; 11 while (p1 < version1.size() && version1[p1] != ‘.‘) 12 { 13 v1 = v1 * 10 + version1[p1] - ‘0‘; 14 p1++; 15 } 16 while (p2 < version2.size() && version2[p2] != ‘.‘) 17 { 18 v2 = v2 * 10 + version2[p2] - ‘0‘; 19 p2++; 20 } 21 22 if (v1 > v2) 23 { 24 return 1; 25 } 26 else if (v1 < v2) 27 { 28 return -1; 29 } 30 p1++; 31 p2++; 32 } 33 return 0; 34 } 35 };
以上是关于字符串165. 比较版本号的主要内容,如果未能解决你的问题,请参考以下文章