码迷,mamicode.com
首页 > 其他好文 > 详细

【字符串】165. 比较版本号

时间:2020-05-04 13:36:04      阅读:52      评论:0      收藏:0      [点我收藏+]

标签:想法   双指针   solution   添加   strong   end   color   com   分割   

题目:

 

 

解答:

方法一:分割+解析,两次遍历,线性空间。

第一个想法是将两个字符串按点字符分割成块,然后逐个比较这些块。

如果两个版本号的块数相同,则可以有效工作。如果不同,则需要在较短字符串末尾补充相应的 .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. 比较版本号

标签:想法   双指针   solution   添加   strong   end   color   com   分割   

原文地址:https://www.cnblogs.com/ocpc/p/12826013.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!