开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第38天,点击查看活动详情
题目 leetcode.cn/
-
句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格。每个 token 要么是一个由数字
0-9组成的不含前导零的 正整数 ,要么是一个由小写英文字母组成的 单词 。- 示例,
"a puppy has 2 eyes 4 legs"是一个由 7 个 token 组成的句子:"2"和"4"是数字,其他像"puppy"这样的 tokens 属于单词。
- 示例,
-
给你一个表示句子的字符串
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 。这些数字不是严格递增的。
-
示例 4:
- 输入: s = "4 5 11 26"
- 输出: true
- 解释: s 中的数字是:4, 5, 11, 26 。这些数字是按从左到右严格递增的:4 < 5 < 11 < 26 。
提示:
3 <= s.length <= 200s由小写英文字母、空格和数字0到9组成(包含0和9)s中数字 token 的数目在2和100之间(包含2和100)s中的 token 之间由单个空格分隔s中至少有 两个 数字s中的每个数字都是一个 小于100的 正 数,且不含前导零s不含前导或尾随空格
代码
function areNumbersAscending(s: string): boolean {
let str = s.split(' ');
let reg = /^[a-z]/;
for(let i = 0; i < str.length; i++){
if(reg.test(str[i])){
str.splice(i, 1);
i--
}
}
for(let k = 0; k < str.length - 1; k++){
if(Number(str[k]) >= Number(str[k+1])){
return false
}
}
return true
};
-
正则过滤:
- 要比较数字是否是按照严格递增,首先要把数字从字符串中过滤出来
- 定义正则
/^[a-z]/用来匹配是否是由英文字母组成的单词 - 首先将给定的整个字符串使用
split方法按照空格切割成字符串数组 - 遍历数组,将每一项交给上面定义的正则去匹配校验,如果当前项是英文字母组成,就将当前项从数组中删除,这样剩余的都是数字字符串
- 遍历剩余的数字字符串数组,因为是字符串,所以每一项都要转化成数字比较。如果出现前一项大于等于后一项,则说明当前的数组不是按照单调递增的,返回
false。当数组所有项都符合,则说明当前数字严格按照单调递增的
-
结果: