题解 | #比较版本号#
比较版本号
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; }
我的刷题题解 文章被收录于专栏
自己在刷题过程中的一些思路和见解记录