1. 程式人生 > 其它 >165.比較版本號

165.比較版本號

技術標籤:# 字串處理專題java字串leetcode演算法

165. 比較版本號

給你兩個版本號 version1version2 ,請你比較它們。

版本號由一個或多個修訂號組成,各修訂號由一個 '.' 連線。每個修訂號由 多位數字 組成,可能包含 前導零 。每個版本號至少包含一個字元。修訂號從左到右編號,下標從 0 開始,最左邊的修訂號下標為 0 ,下一個修訂號下標為 1 ,以此類推。例如,2.5.330.1 都是有效的版本號。

比較版本號時,請按從左到右的順序依次比較它們的修訂號。比較修訂號時,只需比較 忽略任何前導零後的整數值 。也就是說,修訂號 1 和修訂號 001 相等 。如果版本號沒有指定某個下標處的修訂號,則該修訂號視為 0

。例如,版本 1.0 小於版本 1.1 ,因為它們下標為 0 的修訂號相同,而下標為 1 的修訂號分別為 010 < 1

返回規則如下:

  • 如果 *version1* > *version2* 返回 1
  • 如果 *version1* < *version2* 返回 -1
  • 除此之外返回 0

示例 1:

輸入:version1 = "1.01", version2 = "1.001"
輸出:0
解釋:忽略前導零,"01" 和 "001" 都表示相同的整數 "1"

示例 2:

輸入:version1 = "1.0", version2 = "1.0.0"
輸出:0
解釋:version1 沒有指定下標為 2 的修訂號,即視為 "0"

示例 3:

輸入:version1 = "0.1", version2 = "1.1"
輸出:-1
解釋:version1 中下標為 0 的修訂號是 "0",version2 中下標為 0 的修訂號是 "1" 。0 < 1,所以 version1 < version2

示例 4:

輸入:version1 = "1.0.1", version2 = "1"
輸出:1

示例 5:

輸入:version1 = "7.5.2.4", version2 = "7.5.3"
輸出:-1

提示:

  • 1 <= version1.length, version2.length <= 500
  • version1version2 僅包含數字和 '.'
  • version1version2 都是 有效版本號
  • version1version2 的所有修訂號都可以儲存在 32 位整數

思路:

由於給出的引數僅包含數字和'.',故我們可以從前往後比較以'.'分隔的數字即可。不夠的版本則用0代替。

這裡我們需要用到字串處理問題中的一個最最最常見的技巧,如下,用於找到符合某要求的子串的索引區間。

如這裡就是找到用'.'分隔的每個數字的區間為[i,x)

int x = i;
while(x < version1.length() && version1.charAt(x) != '.') x++;

Java程式碼

class Solution {
    public int compareVersion(String version1, String version2) {
        int i = 0,j = 0;
        //只要還有至少一個字串沒有遍歷結束,則仍可繼續往後比較
        while(i < version1.length() || j < version2.length()){
            int x = i,y = j;
            //找到兩個字串下標相同的修訂號並進行比較
            while(x < version1.length() && version1.charAt(x) != '.') x++;
            while(y < version2.length() && version2.charAt(y) != '.') y++;
            //若版本號沒有指定某個下標處的修訂號,則該修訂號視為0
            int a = x == i ? 0 : Integer.valueOf(version1.substring(i,x));
            int b = y == j ? 0 : Integer.valueOf(version2.substring(j,y));
            if(a > b) return 1;
            if(a < b) return -1;
            //繼續往後,比較後面的修訂號
            i = x + 1;
            j = y + 1;
         }
        return 0;
    }
}

在這裡插入圖片描述