题解 | #比较版本号#

比较版本号

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

很多题解用转换成数字来进行计算比较的都是没有看清楚题目「版本号中每一节可能超过int的表达范围」,他们的题解适合LeetCode上的比较版本号,不适合牛客的这个题意。 这才是真正的符合题意的。

import java.util.*;


public class Solution {
    /**
     * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
     *
     * 比较版本号
     * @param version1 string字符串 
     * @param version2 string字符串 
     * @return int整型
     */
    public int compare (String version1, String version2) {
        // write code here
        // 通过split函数分割
        String[] s1 = version1.split("\\.");
        String[] s2 = version2.split("\\.");
        int len = Math.max(s1.length, s2.length);
        for (int i = 0; i < len; i++) {
            // 如果当前下标没有越界,那么就去当前字符串数组对应的字符串值,否则赋值为"0"
            String str1 = i < s1.length ? s1[i] : "0";
            String str2 = i < s2.length ? s2[i] : "0";
            for (int j = 0; j < str1.length(); j++) {
              // 截取从首位开始不为0的字符串
                if (j == str1.length() - 1 || str1.charAt(j) != '0') {
                    str1 = str1.substring(j);
                    break;
                }
            }
            
            for (int k = 0; k < str2.length(); k++) {
               // 截取从首位开始不为0的字符串
                if (k == str2.length() - 1 || str2.charAt(k) != '0') {
                    str2 = str2.substring(k);
                    break;
                }
            }
           // 首先可以比较字符串长度
            if (str1.length() > str2.length()) {
                return 1;
            } else if (str1.length() < str2.length()) {
                return -1;
            } else { // 如果两个字符串长度一样长,那就比较大小,如果大小也一样,这里不能直接return 0,因为后面有可能还有后续的字符串没有比较完   
                if (str1.compareTo(str2) > 0) {
                    return 1;
                } else if (str1.compareTo(str2) < 0) {
                    return -1;
                } 
            }
        }
        return 0;
    }
}
全部评论

相关推荐

牛客120493863号:你姐东南大学硕士在读,那就找导师或者师兄师姐打听下同门同方向前辈就业最好的是去向哪几家公司了呗(如果不想走考公选调的话),这个是最有参考性的。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务