class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* 比较版本号
* @param version1 string字符串
* @param version2 string字符串
* @return int整型
*/
//将version按照‘.’进行划分
pair<string,int> obstr(string version, int st, int l)
{
string str;
while(version[st]=='0')
st++;
int i=st;
for(;i<l;i++)
{
if(version[i]=='.')
{
str=version.substr(st,i-st);
st=i+1;
break;
}
}
//到达末尾
if(i==l)
{
str=version.substr(st,l-st);
st=l;
}
pair<string,int> ans;
ans.first=str;ans.second=st;
return ans;
}
int compare(string version1, string version2) {
// write code here
int st1=0,st2=0,l1=version1.size(),l2=version2.size();
while(st1<l1&&st2<l2)
{
string str1,str2;
//获取str1
pair<string,int> temp1=obstr(version1, st1, l1);
str1=temp1.first; st1=temp1.second;
pair<string,int> temp2=obstr( version2, st2, l2);
str2=temp2.first; st2=temp2.second;
//对画分的字符进行比较,如果str1的长度>str2 或者在俩者相等的情况下,str1<str2 均表示version1 <version2 反之亦然。
if(str1.size()<str2.size()||(str1.size()==str2.size()&&str1<str2)) return -1;
else if(str1.size()>str2.size()||(str1.size()==str2.size()&&str1>str2)) return 1;
}
//当version到达尾时需要判断version2在st2后的字符是否为0,若为0则需要去除‘0’后继续判断
if(st1==l1&&st2<l2)
{
if(version2[st2]!='0') return -1;
//去除后继的0
else
{
for(int i=st2;i<l2;i++)
{
if(isdigit(version2[i])&&version2[i]!='0') return -1;
}
return 0;
}
}
else if(st2==l2&&st1<l1)
{
if(version1[st1]!='0') return 1;
else
{
for(int i=st1;i<l1;i++)
{
if(isdigit(version1[i])&&version2[i]!='0') return 1;
}
return 0;
}
return 1;
}
return 0;
}};

京公网安备 11010502036488号