質問に従って、'.2つのバージョンの各サブバージョン番号を分割し、左から右に1つずつ比較します。 一方のバージョンのサブバージョン番号の数が他方より多い場合、サブバージョンの数が少ない方のバージョンを0で表します。こうすることで、常に2つのバージョンのすべてのサブバージョンを比較することができます。
分割サブバージョンは、配列に格納されているサブバージョンに分割ダブルポインタを使用することができます、配列のサブバージョンの2つのバージョンに分かれて格納され、1つずつ配列を比較し、それらが背面に等しい場合は、それ以外の結果を返します。
配列が別の配列よりも大きい場合は、0と他の配列の残りの部分を比較する大きい方の配列の現在の要素を小さくし、比較のサイズまたは2つの配列が終了するまで比較を続行すると、2つのバージョン番号が同じであることを示す、0のリターンでオーバーしています。
コードは以下の通り:
class Solution {
public:
int compareVersion(string version1, string version2) {
vector<int> v1, v2;
int i = 0;
for(; i < version1.size(); ++i) {
int j = i;
while(j < version1.size() && version1[j] != '.') { //配列v1に格納されているサブバージョン番号を分割するためのダブルポインタ。
++j;
}
string subVer = version1.substr(i, j - i);
v1.push_back(atoi(subVer.c_str()));
i = j;
}
for(i = 0; i <version2.size(); ++i) {
int j = i;
while(j < version2.size() && version2[j] != '.') {
++j;
}
string subVer = version2.substr(i, j - i);
v2.push_back(atoi(subVer.c_str()));
i = j;
}
for(int i = 0; i < min(v1.size(), v2.size()); ++i) {
if(v1[i] > v2[i]) {
return 1;
} else if(v1[i] < v2[i]) {
return -1;
}
}
if(v1.size() < v2.size()) {
for(int i = v1.size(); i < v2.size(); ++i) {
if(0 < v2[i]) { //もしv1のサイズがv2のサイズより小さければ、v1の足りない部分が0と比較され、v2が0と比較される。[i]比較、後者のサブバージョン番号が0であることを示す
return -1;
}
}
}
if(v1.size() > v2.size()) {
for(int i = v2.size(); i < v1.size(); ++i) {
if(v1[i] > 0) {
return 1;
}
}
}
return 0;
}
};