比較版本號
阿新 • • 發佈:2018-12-30
問題描述
比較兩個版本號 version1 和 version2。
如果 version1 > version2
返回 1
,如果 version1 < version2
返回 -1
, 除此之外返回 0
。
你可以假設版本字串非空,並且只包含數字和 .
字元。
.
字元不代表小數點,而是用於分隔數字序列。
例如,2.5
不是“兩個半”,也不是“差一半到三”,而是第二版中的第五個小版本。
示例 1:
輸入:version1
= "0.1",version2
= "1.1" 輸出: -1
示例 2:
輸入:version1
= "1.0.1",version2
= "1" 輸出: 1
示例 3:
輸入:version1
= "7.5.2.4",version2
= "7.5.3" 輸出: -1
程式碼實現
思路:
1.字串分割;
2.空位補0;
3.字串轉整數後逐位比較。
程式碼如下:
class Solution { public: vector<string> split(const string& str, const string& pattern) { vector<string> ret; if (pattern.empty()) return ret; size_t start = 0, index = str.find_first_of(pattern, 0); while (index != str.npos) { if (start != index) ret.push_back(str.substr(start, index - start)); start = index + 1; index = str.find_first_of(pattern, start); } if (!str.substr(start).empty()) ret.push_back(str.substr(start)); return ret; } int compareVersion(string version1, string version2) { vector<string> V1 = split(version1, "."); vector<string> V2 = split(version2, "."); int len = max(V1.size(), V2.size()); V1.insert(V1.end(), len - V1.size(), "0"); V2.insert(V2.end(), len - V2.size(), "0"); for (int i = 0; i < len; i++) { if (atoi(V1[i].c_str()) > atoi(V2[i].c_str())) return 1; if (atoi(V1[i].c_str()) < atoi(V2[i].c_str())) return -1; } return 0; } };