题解 | #比较版本号#
比较版本号
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));
}
};
查看8道真题和解析