🌕 165. 比较版本号

吞佛童子2022年10月10日
  • algorithm
  • String
小于 1 分钟

🌕 165. 比较版本号

难度: 🌕

问题描述

img_3.png


解法

    public int compareVersion(String version1, String version2) {
        // 思路:
        // 以 . 分割,获取修订号,比较大小
        int m = version1.length();
        int n = version2.length();
        int a = 0;
        int b = 0;
        int left = -1;
        int right = -1;
        while(a < m && b < n) {
            // a 为左边界,找到第一个非 0 值
            while(a < m && version1.charAt(a) == '0') {
                a ++;
            }
            if(a == m) {
                break;
            }
            int ar = -1;
            if(version1.charAt(a) == '.') { // 说明 . 之前全部为 0
                left = 0;
                ar = a;
            } else {
                // a 为左边界,找到对应右边界
                ar = a + 1;
                while(ar < m && version1.charAt(ar) != '.') {
                    ar ++;
                }
                // [a, ar - 1]
                left = Integer.parseInt(version1.substring(a, ar));
            }
            while(b < n && version2.charAt(b) == '0') {
                b ++;
            }
            if(b == n) {
                break;
            }
            int br = -1;
            if(version2.charAt(b) == '.') {
                right = 0;
                br = b;
            } else {
                br = b + 1;
                while(br < n && version2.charAt(br) != '.') {
                    br ++;
                }
                right = Integer.parseInt(version2.substring(b, br));
            }
            // System.out.println(left + "   " + right + "  " + b + "  " + br);
            if(left < right) {
                return -1;
            } else if(left > right) {
                return 1;
            } else {
                a = ar + 1;
                b = br + 1;
            }
        }
        while(a < m) {
            // 说明 version2 已经全部遍历完,version2 该位 == 0
            while(a < m && (version1.charAt(a) <= '0' || version1.charAt(a) > '9')) {
                a ++;
            }
            if(a == m) {
                return 0;
            } else {
                // 遇到了一个 1 
                return 1;
            }
        }
        while(b < n) {
            while(b < n && (version2.charAt(b) <= '0' || version2.charAt(b) > '9')) {
                b ++;
            }
            if(b == n) {
                return 0;
            } else {
                return -1;
            }
        }
        return 0;
    }
}

输出

img_2.png

上次编辑于: 2022/10/10 下午8:43:48
贡献者: liuxianzhishou