题解 | #比较版本号# 对字符串进行split
比较版本号
https://www.nowcoder.com/practice/2b317e02f14247a49ffdbdba315459e7
class Solution {
public:
// 官解二 需要额外存储的思路 只当联系对字符串的处理
// 积累!
// 把一个字符串 按给定 字符 分割 并返回 字符串的vec
vector<string> split(const string&str, const char& delim)
{
vector<string> res;
stringstream ss(str);
string tmp;
while(getline(ss, tmp, delim))
{
if(!tmp.empty())
res.push_back(std::move(tmp));
}
return res;
}
int strs2num(string& ss)
{
int ret = 0;
for(char c:ss)
{
int d = c-'0';
ret = 10*ret + d;
}
return ret;
}
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
int compare(string version1, string version2) {
// write code here
vector<string> arr1 = split(version1, '.');
vector<string> arr2 = split(version2, '.');
int m = arr1.size();
int n = arr2.size();
int i=0, j=0;
int num1 =0, num2 = 0;
while(i<m || j<n)
{
num1 = 0;
num2 = 0;
if(i<m)
{
// 分别转为数字
string ss1 = arr1[i];
num1 = strs2num(ss1);
}
if(j<n)
{
string ss2 = arr2[j];
num2 = strs2num(ss2);
}
if(num1<num2)
{
return -1;
}
else if(num1>num2)
{
return 1;
}
i++;
j++;
}
return 0;
}
};