Description Link to heading
2042.check-if-numbers-are-ascending-in-a-sentence
Solution Link to heading
analog1 Link to heading
I change string s
to " " + s + " "
, then traverse the new string, check whether substr between two blanks is numbers;
analog2 Link to heading
We just check whether current char is a number, if that, num = num * 10 + s[i] - '0'
, loop until current char is not a number.
Code Link to heading
code1 Link to heading
class Solution {
public:
int mpow(int e, int x) {
while (x--)
e *= 10;
return e;
}
int str2num(int l, int r, string &s) {
int ans = 0;
for (int i = l + 1; i < r; i++) {
if (s[i] - '0' <= 9 && s[i] - '0' >= 0) {
ans += mpow(s[i] - '0', r - i - 1);
} else {
return 0;
}
}
return ans;
}
bool areNumbersAscending(string s) {
int blank_l = 0;
int blank_r = 0, tmp = 0;
vector<int> numbers;
s = " " + s + " ";
for (int i = 0; i < s.size(); i++) {
if (s[i] == ' ') {
blank_l = blank_r;
blank_r = i;
tmp = str2num(blank_l, blank_r, s);
if (tmp > 0)
numbers.push_back(tmp);
}
}
for (int i = 1; i < numbers.size(); i++) {
if (numbers[i] <= numbers[i - 1])
return false;
}
return true;
}
};
code2 Link to heading
class Solution {
public:
bool areNumbersAscending(string s) {
int pre = 0, pos = 0;
while (pos < s.size()) {
if (isdigit(s[pos])) {
int cur = 0;
while (pos < s.size() && isdigit(s[pos])) {
cur = cur * 10 + s[pos] - '0';
pos++;
}
if (cur <= pre) {
return false;
}
pre = cur;
} else {
pos++;
}
}
return true;
}
};