LeetCode 165. Compare Version Numbers
每日題。挺單純的字串比對,可能難度被高估所以一堆人按爛。
題目
輸入字串version1和version2代表兩個版本號,若version1較舊版則回傳-1;version1較新則回傳1;版本相同則回傳0。
版本號由一個或多個整數組成,中間由”.”分隔。須由左至右依序比對,且整數可能帶有前導0,可以無視,即001和1為相同的版本。
解法
先使用split以”.”將兩字串切開,得到長度分別為M和N的陣列。從0開始比對至min(M,N),將其中子字串轉型成整數,直接比較大小即可。
但是有可能出現0.0.1和0.0這種測資,多出來的部分沒有處理到,必須另外寫兩串處理多餘長度的子字串。若v1較長,其中出現不為0的整數代表v1較新,回傳1;若v2較長,出現不為0的整數代表v1較舊,回傳-1。順利執行到最後沒有中斷代表兩版本相等,回傳0。
class Solution:
def compareVersion(self, version1: str, version2: str) -> int:
s1 = version1.split('.')
s2 = version2.split('.')
M, N = len(s1), len(s2)
idx = 0
while idx < M and idx < N:
v1 = int(s1[idx])
v2 = int(s2[idx])
if v1 > v2:
return 1
elif v1 < v2:
return -1
else:
idx += 1
while idx < M:
if int(s1[idx]) != 0:
return 1
idx += 1
while idx < N:
if int(s2[idx]) != 0:
return -1
idx += 1
return 0