leetcode 比较版本号 中等
双指针:两个下标分别指向 version1 和 version2,每一次都取一段版本号进行比较即可。题目说了所有修订号都可以存储在 32 位 int 中,所以直接转成整数比较就行.
此外需要特殊注意样例 2,这与字符串字典序比较并不相同。
如代码中:while 的循环条件写为 l1 < version1.size() || l2 < version2.size() 而非 l1 < version1.size() && l2 < version2.size(),最后再来特殊判断,最后的特殊判断其实不好处理。
class Solution { public: int compareVersion(const string &version1, const string &version2) { int l1 = 0, l2 = 0; int val1 = 0, val2 = 0; while(l1 < version1.size() || l2 < version2.size()) { // 与字符串字典序不同, 并非 val1 = val2 = 0; while(l1 < version1.size() && version1[l1] != '.') { val1 = val1 * 10 + version1[l1] - '0'; ++ l1; } ++ l1; while(l2 < version2.size() && version2[l2] != '.') { val2 = val2 * 10 + version2[l2] - '0'; ++ l2; } ++ l2; if(val1 < val2) return -1; if(val1 > val2) return 1; } return 0; } };