开启掘金成长之旅!这是我参与「掘金日新计划 · 2 月更文挑战」的第 19 天,点击查看活动详情
刷题的日常-2023年2月21号
一天一题,保持脑子清爽
检查句子中的数字是否递增
来自leetcode的 2042 题,题意如下:
句子是由若干 token 组成的一个列表,token 间用 单个 空格分隔,句子没有前导或尾随空格。每个 token 要么是一个由数字 0-9 组成的不含前导零的 正整数 ,要么是一个由小写英文字母组成的 单词 。
- 示例,"a puppy has 2 eyes 4 legs" 是一个由 7 个 token 组成的句子:"2" 和 "4" 是数字,其他像 "puppy" 这样的 tokens 属于单词。
给你一个表示句子的字符串 s ,你需要检查 s 中的 全部 数字是否从左到右严格递增(即,除了最后一个数字,s 中的 每个 数字都严格小于它 右侧 的数字)。
如果满足题目要求,返回 true ,否则,返回 false 。
理解题意
通过题意,我们可以将信息整理如下:
- 题目给出一个字符串
- 字符串由字母、空格以及数字字符组成
- 我们需要判断由空格分割之后,将数字字符表示的数字提取出来
- 如果数字是严格递增的,返回 true,否则返回 false
做题思路
既然要求的是比较数字,那么就只需要提取数字字符就可以了。步骤如下:
- 循环遍历字符串中的字符
- 如果不是数字字符,直接跳过
- 如果遇到数字字符,将数字字符提取
- 比较前一个字符和当前字符的大小,如果不是严格递增,返回false
- 最后肯定是满足题意的,返回 true 即可
代码实现
代码实现如下:
public class Solution {
public boolean areNumbersAscending(String s) {
int idx = 0, pre = -1, curr;
char c;
while (idx < s.length()) {
c = s.charAt(idx++);
if (!Character.isDigit(c)) {
continue;
}
curr = c - '0';
while (idx < s.length()) {
c = s.charAt(idx++);
if (!Character.isDigit(c)) {
break;
}
curr *= 10;
curr += c - '0';
}
if (curr <= pre) {
return false;
}
pre = curr;
}
return true;
}
}