题解 | #比较版本号#
比较版本号
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)); } };