165. Compare Version Numbers

class Solution {
public:
    int compareVersion(string version1, string version2) {
        int v1, v2, t;
        string s1, s2;
        v1 = version1.find('.');
        v2 = version2.find('.');
        while(v1 != -1 && v2 != -1)
        {
            s1 = version1.substr(0, v1);
            s2 = version2.substr(0, v2);
            s1 = f(s1, '0');
            s2 = f(s2, '0');
            t = compare(s1, s2);
            if(t != 0)
            return t;
            version1 = version1.erase(0, v1+1);
            version2 = version2.erase(0, v2+1);
            v1 = version1.find('.');
            v2 = version2.find('.');
        }
        if(v1 == -1 && v2 == -1)
        return compare(f(version1, '0'), f(version2, '0'));
        else if(v1 == -1)
        {
            s2 = version2.substr(0, v2);
            t = compare(f(version1, '0'), f(s2, '0'));
            if(t != 0)
            return t;
            else
            {
                version2 = version2.erase(0, v2+1);
                version2 = ff(version2, '.');
                version2 = ff(version2, '0');
                if(version2  == "")
                return 0;
                else
                return -1;
            }
        }
        else
        {
            s1 = version1.substr(0, v1);
            t = compare(f(s1, '0'), f(version2, '0'));
            if(t != 0)
            return t;
            else
            {
                version1 = version1.erase(0, v1+1);
                version1 = ff(version1, '.');
                version1 = ff(version1, '0');
                if(version1  == "")
                return 0;
                else
                return 1;
            }
        }
    }
    string f(string s, char t)
    {
        int i = 0;
        while(s[i] == t && i < s.size())
        {
            s.erase(i, 1);
        }
        return s;
    }
    string ff(string s, char t)
    {
        int i = 0;
        while(i < s.size())
        {
            if(s[i] == t)
            {
                s.erase(i, 1);
                i--;
            }
            i++;
        }
        return s;
    }
    int compare(string s1, string s2)
    {
        if(s1.size() > s2.size())
        return 1;
        else if(s1.size() < s2.size())
        return -1;
        else
        {
            for(int i = 0; i < s1.size(); i++)
            {
                if(s1[i] > s2[i])
                return 1;
                if(s1[i] < s2[i])
                return -1;
            }
            return 0;
        }
    }
};

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值