2047. Number of Valid Words in a Sentence #
题目 #
- 句子仅由小写字母(
'a'
到'z'
)、数字('0'
到'9'
)、连字符('-'
)、标点符号('!'
、'.'
和','
)以及空格(' '
)组成。每个句子可以根据空格分解成 一个或者多个 token ,这些 token 之间由一个或者多个空格' '
分隔。 - 如果一个 token 同时满足下述条件,则认为这个 token 是一个有效单词:
- 仅由小写字母、连字符和/或标点(不含数字)组成。
- 至多一个 连字符
'-'
。如果存在,连字符两侧应当都存在小写字母("a-b"
是一个有效单词,但"-ab"
和"ab-"
不是有效单词)。 - 至多一个 标点符号。如果存在,标点符号应当位于 token 的 末尾 。
- 这里给出几个有效单词的例子:
"a-b."
、"afad"
、"ba-c"
、"a!"
和"!"
。 - 给你一个字符串
sentence
,请你找出并返回sentence
中 有效单词的数目 。
思路 #
模拟 #
代码 #
模拟 #
class Solution {
public boolean isValid(String token) {
if (token.length() == 0) return false;
char[] array = token.toCharArray();
int N = array.length;
/** rule 2 */
int numHypen = 0;
for (int i = 0; i < N; i++) {
Character ch = array[i];
/** rule 1 */
if (Character.isDigit(ch)) return false;
/** rule 2 */
if (ch == '-') {
if (i == 0 || i == N - 1) return false;
if (++numHypen > 1) return false;
if (Character.isLetter(array[i+1]) == false) return false;
}
/** rule 3 */
if (ch == '.' || ch == ',' || ch == '!') return i == N - 1;
}
return true;
}
public int countValidWords(String sentence) {
String[] tokens = sentence.split(" ");
int validWords = 0;
for (String token: tokens) {
if (isValid(token) == true) validWords++;
}
return validWords;
}
}