题解 | #比较版本号#

比较版本号

https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7

class Solution {
public:
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 比较版本号
     * @param version1 string字符串 
     * @param version2 string字符串 
     * @return int整型
     */
    int compare(string version1, string version2) {
        auto parse = [](const auto& s) -> std::vector<size_t> {
            size_t cur{0};
            std::vector<size_t> res;
            for(char c : s) {
                if (c >= '0' and c <= '9') {
                    cur = cur * 10 + (c - '0');
                } else {
                    res.emplace_back(std::move(cur));
                    cur = 0;
                }
            }
            res.emplace_back(std::move(cur));
            while(not res.empty() and res.back() == 0) res.pop_back();
            return res;
        };

        auto cmp = [](const auto& v1, const auto& v2) -> int {
            auto it1 = v1.cbegin(), it2 = v2.cbegin();
            while(it1 != v2.cend() and it2 != v2.cend()) {
                if(*it1 == *it2) {
                    ++ it1; ++it2;
                } else {
                    return *it1 > *it2? 1 : -1;
                }
            }
            if(it1 != v1.cend()) return 1;
            else if (it2 != v2.cend()) return -1;
            else return 0;
        };

        return cmp(parse(version1), parse(version2));
    }
};

全部评论

相关推荐

不愿透露姓名的神秘牛友
10-05 10:13
已编辑
HHHHaos:让这些老登来现在秋招一下,简历都过不去
点赞 评论 收藏
分享
评论
点赞
收藏
分享
牛客网
牛客企业服务