(本来今天就只打算写一题来着,刚刚看到一个人的主页,决定一天刷两题 卷起来tmd)
思路:
遍历。有点类似于双指针。遇到新的数字了就更新一下
需要注意的是,每次遇到数字的时候,有可能是1位数,也有可能是两位数(题中说了数字范围小于100的正数,所以就只有这两种可能)
不难,就是细节处理的时候小心一点就行。
ac代码:
class Solution {
public:
bool areNumbersAscending(string s) {
int now,next,temp;
int i=0;
while(i < s.length() && isdigit(s[i]) == 0){
i++;
}//遇到数字了
if(isdigit(s[i+1]) == 0){
now = s[i];
i++;
}else{
now = s[i]*10 + s[i+1];
i += 2;
}
while(i < s.length() && isdigit(s[i]) == 0){
i++;
}
if(isdigit(s[i+1]) == 0){
next = s[i];
i++;
}else{
next = s[i]*10 + s[i+1];
i += 2;
}
// while(i < s.length() && ){
// if( isdigit(s[i] != 0)){
// next = s[i];
// break;
// }
// i++;
// }
// i++;//先把初始状态摆好 因为题中说至少有两个数字,所以now和next必然存在
if( now >= next){
return false;
}//把一些特殊情况了结掉
//继续往后寻找
while(i < s.length()){
if( now >= next){
return false;//一旦有问题立刻打死
}
if(isdigit(s[i]) != 0 ){//遇到了数字
temp = next;
now = temp;
if(isdigit(s[i+1]) == 0){
next = s[i];
}else{
next = s[i]*10 + s[i+1];
i += 1;
}
}
i++;
}
return true;
}
};