-
Notifications
You must be signed in to change notification settings - Fork 0
/
CompareVersionNumbers.hpp
56 lines (49 loc) · 1.34 KB
/
CompareVersionNumbers.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
//Compare Version Numbers
//
//Compare two version numbers version1 and version1.
//If version1 > version2 return 1, if version1 < version2 return -1, otherwise return 0.
//
//You may assume that the version strings are non - empty and contain only digits and the.character.
//The.character does not represent a decimal point and is used to separate number sequences.
//For instance, 2.5 is not "two and a half" or "half way to version three", it is the fifth
//second - level revision of the second first - level revision.
//
//Here is an example of version numbers ordering :
//
//0.1 < 1.1 < 1.2 < 13.37
#include <string>
using namespace std;
class Solution {
public:
int compareVersion(string version1, string version2) {
std::size_t i = 0;
std::size_t j = 0;
int ver1 = 0;
int ver2 = 0;
while (true)
{
while (i < version1.size() && version1[i] != '.')
ver1 += ver1 * 10 + version1[i++] - '0';
while (j < version2.size() && version2[j] != '.')
ver2 += ver2 * 10 + version2[j++] - '0';
if (ver1 > ver2)
return 1;
else if (ver1 < ver2)
return -1;
else if (i == version1.size() && j == version2.size()
&& ver1 == ver2)
return 0;
else
{
ver1 = 0;
ver2 = 0;
i++;
j++;
if (i > version1.size())
i = version1.size();
if (j > version2.size())
j = version2.size();
}
}
}
};