zoukankan      html  css  js  c++  java
  • [LeetCode] Compare Version Numbers 字符串操作

    Compare two version numbers version1 and version2.
    If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.

    You may assume that the version strings are non-empty and contain only digits and the . character.
    The . character does not represent a decimal point and is used to separate number sequences.
    For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth second-level revision of the second first-level revision.

    Here is an example of version numbers ordering:

    0.1 < 1.1 < 1.2 < 13.37

    Credits:
    Special thanks to @ts for adding this problem and creating all test cases.

    Hide Tags
     String
     
      这题是太多细节的操作,字符串string 的操作其实很简单,主要判断0的情况,需要考虑1.1.0 与1.1 是相等的。代码写的有点冗余,如果再第一个while 中修改可以改短。
     
    #include <iostream>
    #include <string>
    using namespace std;
    
    class Solution {
    public:
        int compareVersion(string version1, string version2) {
            if (version1.length()<1||version2.length()<1)   return 0;
            int beg1 = 0,beg2 = 0;
            int end1 = 0;
            int end2 = 0;
    
            while(end1!=string::npos&&end2!=string::npos){
                end1 = version1.find_first_of('.',beg1);
                end2 = version2.find_first_of('.',beg2);
                int int1 = hFun(version1.substr(beg1,end1-beg1));
                int int2 = hFun(version2.substr(beg2,end2-beg2));
                if(int1 > int2) return 1;
                if(int1 < int2) return -1;
                beg1 = end1 +1;
                beg2 = end2 +1;
            }
            if(end1==string::npos){
                while(end2!=string::npos){
                    end2 = version2.find_first_of('.',beg2);
                    int int2 = hFun(version2.substr(beg2,end2-beg2));
                    if(int2 >0) return -1;
                    beg2 = end2+1;
                }
            }
            if(end2==string::npos){
                while(end1!=string::npos){
                    end1 = version1.find_first_of('.',beg1);
                    int int1 = hFun(version1.substr(beg1,end1-beg1));
                    if(int1 >0) return 1;
                    beg1 = end1+1;
                }
            }
            return 0;
        }
        int hFun(string s)
        {
            int n = 0;
            for(int i=0;i<s.length();i++){
                n*=10;
                n+=s[i]-'0';
            }
            return n;
        }
    };
    
    int main()
    {
        string version1 = "1.1";
        string version2 = "1";
        Solution sol;
        cout<<sol.compareVersion(version1,version2)<<endl;
        return 0;
    }
     
     
     
      
  • 相关阅读:
    echarts仪表盘如何设置图例(legend)
    js上传限制文件大小
    js下载文件及命名(兼容多浏览器)
    为什么每个浏览器都有Mozilla字样(转载于知乎shadow)
    用JS做一个简单的电商产品放大镜功能
    unity下跨平台excel读写
    无限大地图:lightmap拆分
    Unity 打包总结和资源的优化和处理
    Unity3d: 资源释放时存储空间不足引发的思考和遇到的问题
    profiler内存优化:警惕回调函数
  • 原文地址:https://www.cnblogs.com/Azhu/p/4323837.html
Copyright © 2011-2022 走看看