字符串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. 比较版本号的主要内容,如果未能解决你的问题,请参考以下文章

字符串165. 比较版本号

LeetCode#165-比较版本号

leetcode165. 比较版本号

165 Compare Version Numbers 比较版本号

leetcode 165. 比较版本号

LeetCode 165 Compare Version Numbers(比较版本号)(string)(*)