题解 | #比较版本号#

比较版本号

http://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7

分段依次比较(依次比较每个字符,因为每段转换为int的话可能超出范围),遇到两个版本号在某段长度不一致的情况,在短的字符串前面添加'0'补齐。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 比较版本号
     * @param version1 string字符串 
     * @param version2 string字符串 
     * @return int整型
     */
    public int compare (String version1, String version2) {
        // 转义字符
        String[] v1 = version1.split("\\.");
        String[] v2 = version2.split("\\.");
        int idx = 0;
        while(idx < v1.length && idx < v2.length){
            if(v1[idx].length() < v2[idx].length()){
                int cnt = v2[idx].length() - v1[idx].length();
                StringBuilder temp = new StringBuilder(v1[idx]);
                while (cnt > 0){
                    temp.insert(0,'0');
                    cnt--;
                }
                v1[idx] = temp.toString();
            }else if(v1[idx].length() > v2[idx].length()){
                int cnt = v1[idx].length() - v2[idx].length();
                StringBuilder temp = new StringBuilder(v2[idx]);
                while (cnt > 0){
                    temp.insert(0,'0');
                    cnt--;
                }
                v2[idx] = temp.toString();
            }
            // 如果当前段 两个字符串的长度一样 则逐个比较
            char[] t1 = v1[idx].toCharArray();
            char[] t2 = v2[idx].toCharArray();
            for (int i = 0;i<t1.length;i++){
                if(t1[i] > t2[i]){
                    return 1;
                }else if(t1[i] < t2[i])
                    return -1;
                else
                    continue;
            }
            idx++;
        }
        // 说明前面都一致 最后v1还有剩余并且不全为0 则v1版本号大
        while (idx < v1.length){
            char[] t1 = v1[idx].toCharArray();
            for (int j = 0;j<t1.length;j++){
                if (t1[j] > '0')
                    return 1;
            }
            idx++;
        }
        if(idx < v2.length){
            char[] t1 = v2[idx].toCharArray();
            for (int j = 0;j<t1.length;j++){
                if (t1[j] > '0')
                    return -1;
            }
            idx++;
        }
        return 0;
    }
}
全部评论

相关推荐

点赞 收藏 评论
分享
牛客网
牛客企业服务