今天我们来聊聊一道有趣的力扣题目——力扣2586.统计范围内的元音字符串数。这个题目看起来很简单,但其中也有一些需要注意的细节。
题目描述
你会得到一个下标从 0 开始的字符串数组 words
和两个整数:left
和 right
。
如果字符串以元音字母开头并以元音字母结尾,那么该字符串就是一个元音字符串,其中元音字母是 ‘a’、‘e’、‘i’、‘o’、‘u’。
你的任务是返回在闭区间 [left, right]
内的元音字符串的数目。
示例 1
输入:words = ["are","amy","u"]
, left = 0
, right = 2
输出:2
解释:
- “are” 是一个元音字符串,因为它以 ‘a’ 开头并以 ‘e’ 结尾。
- “amy” 不是元音字符串,因为它没有以元音字母结尾。
- “u” 是一个元音字符串,因为它以 ‘u’ 开头并以 ‘u’ 结尾。
在上述范围中的元音字符串数目为 2。
示例 2
输入:words = ["hey","aeo","mu","ooo","artro"]
, left = 1
, right = 4
输出:3
解释:
- “aeo” 是一个元音字符串,因为它以 ‘a’ 开头并以 ‘o’ 结尾。
- “mu” 不是元音字符串,因为它没有以元音字母开头。
- “ooo” 是一个元音字符串,因为它以 ‘o’ 开头并以 ‘o’ 结尾。
- “artro” 是一个元音字符串,因为它以 ‘a’ 开头并以 ‘o’ 结尾。
在上述范围中的元音字符串数目为 3。
题目解析
从题目描述可以看出,我们需要检查每一个在指定范围内的字符串,看看它们是否以元音字母开头和结尾。这看起来很简单,但我们需要注意以下几点:
- 元音字母的识别:元音字母是 ‘a’、‘e’、‘i’、‘o’、‘u’。我们可以用一个集合来存储这些字母,方便后续检查。
- 遍历指定范围内的字符串:我们只需要遍历
left
到right
范围内的字符串。 - 判断字符串的首尾字符:对于每一个字符串,我们需要检查它的第一个和最后一个字符是否在元音字母集合中。
代码实现
下面是这个题目的 Java 实现代码:
class Solution {
public int vowelStrings(String[] words, int left, int right) {
Set<Character> list = new HashSet<Character>();
list.add('a');
list.add('e');
list.add('i');
list.add('o');
list.add('u');
int number = 0;
for (int i = left; i <= right; i++) {
String word = words[i];
if (list.contains(word.charAt(0)) && list.contains(word.charAt(word.length() - 1))) {
number++;
}
}
return number;
}
}
代码解析
- 创建元音字母集合:我们首先创建一个集合
list
来存储所有的元音字母。 - 初始化计数器:变量
number
用来计数在指定范围内的元音字符串数目。 - 遍历指定范围内的字符串:从
left
到right
,我们遍历每一个字符串。 - 检查字符串的首尾字符:对于每一个字符串,检查它的第一个字符和最后一个字符是否在元音字母集合中。如果是,则计数器加一。
- 返回计数结果:最后返回计数器的值,即在指定范围内的元音字符串数目。
总结
这道题目考察了我们对字符串操作和集合使用的基本功。通过这道题目,我们不仅复习了如何判断字符串的首尾字符,还练习了如何使用集合来快速查找元素。