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;
    }
};

 

posted @ 2021-09-21 18:59  rookie_Acmer  阅读(47)  评论(0编辑  收藏  举报