165: Compare-Version-Numbers
Medium
table of contents
For this question, my overall algorithm was to iterate through
all the revisions present in both version1 and
version2 and compare them concurrently. To do this, I
created a compareRevision function, that compares the
revision value for both version1 and
version2 and returns:
int compareRevision(string version1, string version2, int& v1Index, int& v2Index) {
// revision values for version1 and version2 respectively
int revision1 = 0;
int revision2 = 0;
while(v1Index < version1.size() && version1[v1Index] != '.') {
revision1 = revision1 * 10 + (version1[v1Index]-'0');
++v1Index;
}
while(v2Index < version2.size() && version2[v2Index] != '.') {
revision2 = revision2 * 10 + (version2[v2Index]-'0');
++v2Index;
}
// increment both indices so they are not stuck on `.`
++v1Index;
++v2Index;
if (revision1 < revision2) {
return -1;
} else if (revision1 > revision2) {
return 1;
} else {
return 0;
}
}Then, I can simply run compareRevision until both
v1Index and v2Index exceed the size of
version1 and version2 respectively, breaking
early if it returns an integer that is not equal to
0. If I reach the end of both version1 and
version2 without breaking early, then that implies that
both versions are equal and we can simply return 0.
int ans;
while (v1Index < version1.size() || v2Index < version2.size()) {
ans = compareRevision(version1, version2, v1Index, v2Index);
if (ans != 0) {
return ans;
}
}
return 0;code
class Solution {
public:
int compareVersion(string version1, string version2) {
int v1Index = 0;
int v2Index = 0;
int ans;
while (v1Index < version1.size() || v2Index < version2.size()) {
ans = compareRevision(version1, version2, v1Index, v2Index);
if (ans != 0) {
return ans;
}
}
return 0;
}
private:
int compareRevision(string version1, string version2, int& v1Index, int& v2Index) {
int revision1 = 0;
int revision2 = 0;
while(v1Index < version1.size() && version1[v1Index] != '.') {
revision1 = revision1 * 10 + (version1[v1Index]-'0');
++v1Index;
}
while(v2Index < version2.size() && version2[v2Index] != '.') {
revision2 = revision2 * 10 + (version2[v2Index]-'0');
++v2Index;
}
++v1Index;
++v2Index;
if (revision1 < revision2) {
return -1;
} else if (revision1 > revision2) {
return 1;
} else {
return 0;
}
}
};