给你一个表示句子的字符串 s ,你需要检查 s 中的 全部 数字是否从左到右严格递增(即,除了最后一个数字,s 中的 每个 数字都严格小于它 右侧 的数字)。
如果满足题目要求,返回 true ,否则,返回 __false 。
示例 1:
**输入:** s = "1 box has 3 blue 4 red 6 green and 12 yellow marbles"
**输出:** true
**解释:** 句子中的数字是:1, 3, 4, 6, 12 。
这些数字是按从左到右严格递增的 1 < 3 < 4 < 6 < 12 。
示例 2:
**输入:** s = "hello world 5 x 5"
**输出:** false
**解释:** 句子中的数字是: _ **5**_ , **_5_** 。这些数字不是严格递增的。
示例 3:
**输入:** s = "sunset is at 7 51 pm overnight lows will be in the low 50 and 60 s"
**输出:** false
**解释:** s 中的数字是:7, _**51**_ , _**50**_ , 60 。这些数字不是严格递增的。
如果 cur 大于 pre,则认为当前的 token 满足递增要求,更新 pre 为 cur,并检测下一个数字 token 是否满足递增;
如果 cur 小于或者等于 pre,则认为不满足递增要求,返回 false;
由于题目中的每个数字 token 转换后的十进制数均为正整数且小于 100,因此我们可以初始化 pre 等于 0,我们依次检测每个为数字的 token 是否满足题目要求即可。
代码
[sol1-Python3]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
classSolution: defareNumbersAscending(self, s: str) -> bool: pre = i = 0 while i < len(s): if s[i].isdigit(): cur = 0 while i < len(s) and s[i].isdigit(): cur = cur * 10 + int(s[i]) i += 1 if cur <= pre: returnFalse pre = cur else: i += 1 returnTrue
var areNumbersAscending = function(s) { let pre = 0, pos = 0; while (pos < s.length) { if (isDigit(s[pos])) { let cur = 0; while (pos < s.length && isDigit(s[pos])) { cur = cur * 10 + s[pos].charCodeAt() - '0'.charCodeAt(); pos++; } if (cur <= pre) { returnfalse; } pre = cur; } else { pos++; } } returntrue; };
funcareNumbersAscending(s string)bool { pre, i := 0, 0 for i < len(s) { if unicode.IsDigit(rune(s[i])) { cur := 0 for i < len(s) && unicode.IsDigit(rune(s[i])) { cur = cur*10 + int(s[i]-'0') i++ } if cur <= pre { returnfalse } pre = cur } else { i++ } } returntrue }