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; }
};