zoukankan      html  css  js  c++  java
  • LeetCode165. 比较版本号

    根据题意,用'.'划分出两个版本的每个子版本号,从左到右逐个比较即可,如果某个版本的子版本号个数比另一个多,则子版本较少的那个版本用0表示子版本,这样就可以一直比较两个版本的所有子版本了。

    划分子版本可以用双指针,划分出的子版本存到一个数组中,都划分好后就得到两个分别存放两个版本的子版本的数组,然后对数组逐个进行比较,如果相等就往后,否则返回结果。

    如果某个数组大于另一个数组,则较小的另一个数组剩下的部分用0和较大的数组的当前元素比较(表示剩下的子版本都是0),一直比较下去直到比较出大小或者两个数组都结束了,都结束了就返回0,说明两个版本号是相同的。

    代码如下:

    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            vector<int> v1, v2;
            int i = 0;
            for(; i < version1.size(); ++i) {
                int j = i;
                while(j < version1.size() && version1[j] != '.') {            //双指针划分出子版本号,存放到数组v1中
                    ++j;
                }
                string subVer = version1.substr(i, j - i);
                v1.push_back(atoi(subVer.c_str()));
                i = j;
            }
            for(i = 0; i <version2.size(); ++i) {
                int j = i;
                while(j < version2.size() && version2[j] != '.') {
                    ++j;
                }
                string subVer = version2.substr(i, j - i);
                v2.push_back(atoi(subVer.c_str()));
                i = j;
            }
            for(int i = 0; i < min(v1.size(), v2.size()); ++i) {
                if(v1[i] > v2[i]) {
                    return 1;
                } else if(v1[i] < v2[i]) {
                    return -1;
                }
            }
            if(v1.size() < v2.size()) {
                for(int i = v1.size(); i < v2.size(); ++i) {
                    if(0 < v2[i]) {                              //如果v1的大小小于v2的大小,则v1不足的部分用0和v2[i]比较,表示后面的子版本号都是0
                        return -1;
                    }
                }
            }
            if(v1.size() > v2.size()) {
                for(int i = v2.size(); i < v1.size(); ++i) {
                    if(v1[i] > 0) {
                        return 1;
                    }
                }
            }
            return 0;
        }
    };
    
  • 相关阅读:
    base64加密后字符串长度
    Mysql如何查字段的长度,Mysql中length()、char_length()的区别
    Java 逆变与协变的名词说明
    Java 泛型在实际开发中的应用
    MySQL自增主键排序问题
    【python基础】怎么实现装饰器?
    【python基础】列表推导式
    【python】爬虫实践项目(一):39问医生
    关于DRF序列化器模型字段参数设置报错AssertionError: May not set both `read_only` and `write_only`
    DRF学习笔记
  • 原文地址:https://www.cnblogs.com/linrj/p/13445406.html
Copyright © 2011-2022 走看看