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

题目

句子仅由小写字母('a''z')、数字('0''9')、连字符('-')、标点符号('!''.'',')以及空格(' ')组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格 ' ' 分隔。

如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:

  • 仅由小写字母、连字符和/或标点(不含数字)组成。
  • 至多一个 连字符 '-' 。如果存在,连字符两侧应当都存在小写字母("a-b" 是一个有效单词,但 "-ab""ab-" 不是有效单词)。
  • 至多一个 标点符号。如果存在,标点符号应当位于 token 的 末尾

这里给出几个有效单词的例子:"a-b.""afad""ba-c""a!""!"

给你一个字符串 sentence ,请你找出并返回 sentence有效单词的数目

示例1:

1
2
3
输入:sentence = "cat and  dog"
输出:3
解释:句子中的有效单词是 "cat"、"and" 和 "dog"

示例2:

1
2
3
4
5
输入:sentence = "!this  1-s b8d!"
输出:0
解释:句子中没有有效单词
"!this" 不是有效单词,因为它以一个标点开头
"1-s" 和 "b8d" 也不是有效单词,因为它们都包含数字

示例3:

1
2
3
4
输入:sentence = "alice and  bob are playing stone-game10"
输出:5
解释:句子中的有效单词是 "alice"、"and"、"bob"、"are" 和 "playing"
"stone-game10" 不是有效单词,因为它含有数字

提示:

  • 1 <= sentence.length <= 1000
  • sentence 由小写英文字母、数字(0-9)、以及字符(' ''-''!''.'',')组成
  • 句子中至少有 1 个 token

解法

解法一:

Java

1
2
3
4
5
6
7
public int countValidWords(String sentence) {
int res = 0;
for (String m: sentence.split(" ")) {
if (m.length() != 0 && m.matches("^[a-z]*([a-z]-[a-z]+)?[!.,]?$")) res++;
}
return res;
}

解法二:

Java

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
public int countValidWords(String sentence) {
String[] words = sentence.split("\\s");
int count = 0;
for (String word : words) {
if (isWordValid(word)) {
count++;
}
}

return count;
}

private boolean isWordValid(String word) {
if (null == word || 0 == word.length()) {
return false;
}

int zhx = 0;
int bd = 0;
for (int i = 0;i < word.length();i++) {
char c = word.charAt(i);
if ('0' <= c && '9' >= c) {
return false;
}

if ('.' == c || '!' == c || ',' == c) {
if (i != word.length() - 1) {
return false;
}
bd++;
}

if (bd > 1) {
return false;
}

if ('-' == c) {
if (0 == i || i == word.length() - 1) {
return false;
}

if ('a' > word.charAt(i - 1) || 'z' < word.charAt(i - 1)) {
return false;
}

if ('a' > word.charAt(i + 1) || 'z' < word.charAt(i + 1)) {
return false;
}

zhx++;
}

if (zhx > 1) {
return false;
}
}
return true;
}
0%