问题描述
比较两个版本号 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;
}
};