版本号是一个字符串,用于标识软件产品的唯一状态。版本号看起来像A.b.c.d,其中A、b等是数字,因此版本号是一个字符串,其中数字由点分隔。这些数字通常代表从大调到小调的层次结构(a是大调,d是小调)。 在这个问题中,我们得到了两个版本号。我们需要对它们进行比较,得出哪一个是最新的版本号(即哪个版本号更大)。
null
例子:
Input: V1 = “1.0.31”V2 = “1.0.27”Output: v1 is latestBecause V2 < V1Input: V1 = “1.0.10”V2 = “1.0.27”Output: v2 is latestBecause V1 < V2
方法: 由于点的原因,不可能直接比较它们,但版本可以部分比较数字,然后可以找到最新版本。遍历字符串和单独的数字部分,并进行比较。如果相等,则比较下一个数字部分,依此类推,直到它们不同,否则将它们标记为相等。 实现一种方法来比较这两个版本。如果有两个以上的版本,那么下面的versionCompare方法可以用作sort method的比较方法,它将根据指定的比较对所有版本进行排序。
C++
// C/C++ program to compare // two version number #include <bits/stdc++.h> using namespace std; // Method to compare two versions. // Returns 1 if v2 is smaller, -1 // if v1 is smaller, 0 if equal int versionCompare(string v1, string v2) { // vnum stores each numeric // part of version int vnum1 = 0, vnum2 = 0; // loop until both string are // processed for ( int i = 0, j = 0; (i < v1.length() || j < v2.length());) { // storing numeric part of // version 1 in vnum1 while (i < v1.length() && v1[i] != '.' ) { vnum1 = vnum1 * 10 + (v1[i] - '0' ); i++; } // storing numeric part of // version 2 in vnum2 while (j < v2.length() && v2[j] != '.' ) { vnum2 = vnum2 * 10 + (v2[j] - '0' ); j++; } if (vnum1 > vnum2) return 1; if (vnum2 > vnum1) return -1; // if equal, reset variables and // go for next numeric part vnum1 = vnum2 = 0; i++; j++; } return 0; } // Driver method to check above // comparison function int main() { string version1 = "1.0.3" ; string version2 = "1.0.7" ; if (versionCompare(version1, version2) < 0) cout << version1 << " is smaller" ; else if (versionCompare(version1, version2) > 0) cout << version2 << " is smaller" ; else cout << "Both version are equal" ; return 0; } |
JAVA
// Java program to compare two version number import java.util.*; class GFG { // Method to compare two versions. // Returns 1 if v2 is // smaller, -1 if v1 is smaller, 0 if equal static int versionCompare(String v1, String v2) { // vnum stores each numeric part of version int vnum1 = 0 , vnum2 = 0 ; // loop until both String are processed for ( int i = 0 , j = 0 ; (i < v1.length() || j < v2.length());) { // Storing numeric part of // version 1 in vnum1 while (i < v1.length() && v1.charAt(i) != '.' ) { vnum1 = vnum1 * 10 + (v1.charAt(i) - '0' ); i++; } // storing numeric part // of version 2 in vnum2 while (j < v2.length() && v2.charAt(j) != '.' ) { vnum2 = vnum2 * 10 + (v2.charAt(j) - '0' ); j++; } if (vnum1 > vnum2) return 1 ; if (vnum2 > vnum1) return - 1 ; // if equal, reset variables and // go for next numeric part vnum1 = vnum2 = 0 ; i++; j++; } return 0 ; } // Driver method to check above // comparison function public static void main(String[] args) { String version1 = "1.0.3" ; String version2 = "1.0.7" ; if (versionCompare(version1, version2) < 0 ) System.out.println(version1 + " is smaller" ); else if (versionCompare(version1, version2) > 0 ) System.out.println(version2 + " is smaller" ); else System.out.println( "Both version are equal" ); } } // This code is contributed by shivanisinghss2110 |
Python3
# Python program to compare two version number # Method to compare two versions. # Return 1 if v2 is smaller, # -1 if v1 is smaller,, # 0 if equal def versionCompare(v1, v2): # This will split both the versions by '.' arr1 = v1.split( "." ) arr2 = v2.split( "." ) n = len (arr1) m = len (arr2) # converts to integer from string arr1 = [ int (i) for i in arr1] arr2 = [ int (i) for i in arr2] # compares which list is bigger and fills # smaller list with zero (for unequal delimiters) if n>m: for i in range (m, n): arr2.append( 0 ) else if m>n: for i in range (n, m): arr1.append( 0 ) # returns 1 if version 1 is bigger and -1 if # version 2 is bigger and 0 if equal for i in range ( len (arr1)): if arr1[i]>arr2[i]: return 1 else if arr2[i]>arr1[i]: return - 1 return 0 # Driver program to check above comparison function version1 = "1.0.3" version2 = "1.0.7" ans = versionCompare(version1, version2) if ans < 0 : print (version1 + " is smaller" ) else if ans > 0 : print (version2 + " is smaller" ) else : print ( "Both versions are equal" ) # This code is contributed by Nikhil Kumar Singh(nickzuck_007) # and improved by Tuhin Das (tuhindas221b) |
C#
// C# program to compare // two version number using System; class GFG { // Method to compare two versions. // Returns 1 if v2 is smaller, -1 // if v1 is smaller, 0 if equal static int versionCompare( string v1, string v2) { // vnum stores each numeric // part of version int vnum1 = 0, vnum2 = 0; // loop until both string are // processed for ( int i = 0, j = 0; (i < v1.Length || j < v2.Length);) { // storing numeric part of // version 1 in vnum1 while (i < v1.Length && v1[i] != '.' ) { vnum1 = vnum1 * 10 + (v1[i] - '0' ); i++; } // storing numeric part of // version 2 in vnum2 while (j < v2.Length && v2[j] != '.' ) { vnum2 = vnum2 * 10 + (v2[j] - '0' ); j++; } if (vnum1 > vnum2) return 1; if (vnum2 > vnum1) return -1; // if equal, reset variables and // go for next numeric part vnum1 = vnum2 = 0; i++; j++; } return 0; } // Driver code static void Main() { string version1 = "1.0.3" ; string version2 = "1.0.7" ; if (versionCompare(version1, version2) < 0) Console.WriteLine(version1 + " is smaller" ); else if (versionCompare(version1, version2) > 0) Console.WriteLine(version2 + " is smaller" ); else Console.WriteLine( "Both version are equal" ); } } // This code is contributed by divyeshrabadiya07. |
Javascript
<script> // Javascript implementation // Method to compare two versions. // Returns 1 if v2 is smaller, -1 // if v1 is smaller, 0 if equal function versionCompare(v1, v2) { // vnum stores each numeric // part of version var vnum1 = 0, vnum2 = 0; // loop until both string are // processed for ( var i = 0, j = 0; (i < v1.length || j < v2.length);) { // storing numeric part of // version 1 in vnum1 while (i < v1.length && v1[i] != '.' ) { vnum1 = vnum1 * 10 + (v1[i] - '0' ); i++; } // storing numeric part of // version 2 in vnum2 while (j < v2.length && v2[j] != '.' ) { vnum2 = vnum2 * 10 + (v2[j] - '0' ); j++; } if (vnum1 > vnum2) return 1; if (vnum2 > vnum1) return -1; // if equal, reset variables and // go for next numeric part vnum1 = vnum2 = 0; i++; j++; } return 0; } // Driver method to check above // comparison function var version1 = "1.0.3" ; var version2 = "1.0.7" ; if (versionCompare(version1, version2) < 0) document.write(version1 + " is smaller" + "<br>" ); else if (versionCompare(version1, version2) > 0) document.write(version2 + " is smaller" + "<br>" ); else document.write( "Both version are equal" + "<br>" ); // This is code is contributed // by shubhamsingh10 </script> |
输出:
1.0.3 is greater
复杂性分析:
- 时间复杂性: O(n),其中n是字符串的长度。 只需要遍历字符串一次。
- 辅助空间: O(1)。 因为不需要额外的空间。
本文由 乌特卡什·特里维迪 .如果你喜欢GeekSforgek,并想贡献自己的力量,你也可以使用 写极客。组织 或者把你的文章寄去评论-team@geeksforgeeks.org.看到你的文章出现在Geeksforgeks主页上,并帮助其他极客。 如果您发现任何不正确的地方,或者您想分享有关上述主题的更多信息,请写下评论。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END