题解 | #比较版本号#

比较版本号

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;
    }
我的刷题题解 文章被收录于专栏

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

全部评论

相关推荐

三题看不懂四题不明白二题无法AC&nbsp;T=int(input())&nbsp;for&nbsp;_&nbsp;in&nbsp;range(T):&nbsp;n=int(input())&nbsp;s=input().split()&nbsp;k,mx=1,1&nbsp;for&nbsp;i&nbsp;in&nbsp;range(len(s)-1):&nbsp;if&nbsp;len(s[i])&lt;len(s[i+1]):&nbsp;k+=1&nbsp;elif&nbsp;len(s[i])==len(s[i+1]):&nbsp;if&nbsp;s[i]&lt;=s[i+1]:&nbsp;k+=1&nbsp;...
恭喜臭臭猴子:第二题用栈就行。合法的括号直接出栈了,剩下的是不合法的,肯定都得一个一个走。出入栈的过程中得记下进栈的括号的下标。最后栈里剩下的括号如果相邻两个的下标不连续,说明它们中间有一个合法的括号序列被出栈,结果加一
投递拼多多集团-PDD等公司10个岗位 > 拼多多求职进展汇总 笔试
点赞 评论 收藏
分享
05-09 12:23
已编辑
华南理工大学 Java
野猪不是猪🐗:给他装的,双九+有实习的能看的上这种厂我直接吃⑨✌们拿它练练面试愣是给他整出幻觉了
点赞 评论 收藏
分享
刘湘_passion:出国旅游?那就小心你的腰子咯
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客企业服务