2042. 检查句子中的数字是否递增

129 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 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:

    • image.png
    • 输入: 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:

    • image.png
    • 输入: 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 <= 200
  • s 由小写英文字母、空格和数字 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。当数组所有项都符合,则说明当前数字严格按照单调递增的
  • 结果:

image.png