题目来源:https://leetcode-cn.com/problems/number-of-valid-words-in-a-sentence/
大致题意:
给一个字符串,判断里面有多少个合法单词,单词间由空格隔开
合法单词的定义:
- 全由字母组成
- 如果有连字符
-,那么只能有一个,且连字符前后必须为合法单词 - 如果有标点符号,那么一定在单词结尾
思路
既然以空格隔开单词,那么可以将所有单词取出来,然后按照规则一个个判断
具体看代码
public int countValidWords(String sentence) {
int count = 0;
String[] words = sentence.split(" ");
for (String word : words) {
if (checkValidWord(word)) {
count++;
}
}
return count;
}
public boolean checkValidWord(String word) {
if (word.length() < 1) {
return false;
}
boolean last = false; // 上一个字符是否为字母
boolean ch1 = false; // 是否有连字符
boolean ch2 = false; // 是否有标点符号
for (int i = 0; i < word.length(); i++) {
char ch = word.charAt(i);
if (ch >= '0' && ch <= '9') { // 如果是数字,不合法
return false;
} else if (Character.isLowerCase(ch)) { // 如果是小写字母,合法,判断下一个字符
last = true;
} else if (ch == '-') { // 如果是连字符
// 如果是连字符时,上一个字符不是字母
// 或者连字符在单词结尾
// 或者已经出现过连字符
// 那么就不合法
if (!last || i == word.length() - 1 || ch1) {
return false;
}
// 标记连字符出现过
ch1 = true;
// 判断下一个字符是否合法
char next = word.charAt(i+1);
// 标记当前字符不为字母
last = false;
if (Character.isLowerCase(next)) {
continue;
} else {
return false;
}
} else { // 如果出现标点
return i == word.length() - 1;
}
}
// 如果没有出现不合法的情况,表示当前单词合法
return true;
}
本文介绍了一个LeetCode题目解决方案,该题要求从给定的句子中统计符合特定规则的有效单词数量。有效单词需全由字母构成,允许单个连字符连接两个合法单词部分,并且标点符号只能出现在单词末尾。
1456

被折叠的 条评论
为什么被折叠?



