题解 | #比较版本号#

比较版本号

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

思路:

正常截取字符串,然后比较字符串数组中的每个数字;如果数字存在以0开头的,则截取子串即可,转换为整数比较大小
如果存在数组长短不一样,则短的数组直接用字符"0"代替。
思路简单易理解

/**
     * 时间 复杂度为n
     * 
     * 就正常分割字符串,然后比较字符串数组中,每一个数字的大小,如果是以0开头,则截取字符串
     * 
     * 
     * @param version1
     * @param version2
     * @return
     */
    public  static int compare (String version1, String version2) {

        String[] array1 = version1.split("\\.");
        String[] array2 = version2.split("\\.");

        int len1 = array1.length;
        int len2 = array2.length;

        int index = 0;
        for (; index < Math.min(len1, len2); index++) {
            int ret = compareSignal(array1[index], array2[index]);
            if (ret != 0) {
                return ret;
            }
        }
        if (len1 > len2){
            for (;index < len1; index++){
                int ret = compareSignal(array1[index], "0");
                if (ret !=0) {
                    return ret;
                }
            }
        } else {
            for (;index < len2; index++){
                int ret = compareSignal("0", array2[index]);
                if (ret !=0) {
                    return ret;
                }
            }
        }
        return  0;
    }

    /**
     * 比较字符串数组中的每个字符串,将字符串转换为整数比较即可
     * 
     * @param str1
     * @param str2
     * @return
     */
    private static int compareSignal(String str1, String str2){
        int v1 = Integer.parseInt(str1.substring(getIndex(str1)));
        int v2 = Integer.parseInt(str2.substring(getIndex(str2)));
        if (v1 == v2) return 0;
        return v1 > v2  ? 1 : -1;
    }

    /**
     * 如果字符串以0开头,则截取字符串,直到不为0开始,返回这个索引,用于截取后面的数字
     * 
     * 如果所有数字都是0,则返回0即可。
     * 
     * @param str
     * @return
     */
    private static int getIndex(String str){
        int index = 0;
        if  (str.startsWith("0")){
            for (char ch : str.toCharArray()){
                if (ch == '0') {
                    index++;
                } else {
                    break;
                }
            }
        }
        if (index >= str.length()) {
            return 0;
        }
        return index;
    }
我的刷题题解 文章被收录于专栏

自己在刷题过程中的一些思路和见解记录

全部评论

相关推荐

01-14 10:23
已编辑
湖南师范大学 计调
太久没更新,前几天看到一条评论,说“牛客就是当年那群做题区毕业了开始找工作还收不住那股味”的群体。字里行间透着居高临下的评判,不是,他该不会以为自己很幽默?很犀利吧?作为在牛客混了不算短日子的用户,我感到的不只是被冒犯,更是一种深刻的悲哀——这种以“松弛感”为名,对另一种生存策略的轻蔑,颇有一种自己考不上大学早早出来混社会,嘲笑考上大学的人是书呆子,然后大言不惭地说:死读书有什么用,人脉和资源才是硬道理。我不知道说这个话的人,手头究竟握着多少真正管用的人脉与资源,也不知道他这么傲慢地说出“那股味”的时候,是站在哪一个巨人的肩膀上,才能如此“松弛从容”地俯视众生,还能品评出别人身上“没收住”的余...
淬月星辉:这种评论把正常的努力扭曲成卷😂,说白了就是自己不努力,看着身边努力的人一个个都事业有成了,自己的心里开始不平衡了,就发这种酸言酸语。牛客可以说是我用过那么多平台里社区氛围最好的论坛了,用了大半年了,基本上没见过有人吵架的,都是在互帮互助提建议,帮忙看简历的,帮忙选offer的,帮忙指点学习路线的,分享工作经验和趣事的,我觉得这才是互联网该有的样子。
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务