# 题目描述
统计范围内的元音字符串数
给你一个下标从 0
开始的字符串数组 words
以及一个二维整数数组 queries
。
每个查询 queries[i] = [li, ri]
会要求我们统计在 words
中下标在 li
到 ri
范围内(包含 这两个值)并且以元音开头和结尾的字符串的数目。
返回一个整数数组,其中数组的第 i
个元素对应第 i
个查询的答案。
注意:元音字母是'a'、'e'、'i'、'o' 和 'u'
。
提示:
1 <= words.length <= 105
1 <= words[i].length <= 40
words[i]
仅由小写英文字母组成sum(words[i].length) <= 3 * 105
1 <= queries.length <= 105
0 <= queries[j][0] <= queries[j][1] < words.length
# 测试用例
用例1:
- 输入:
words = ["aba","bcb","ece","aa","e"], queries = [[0,2],[1,4],[1,1]]
- 输出:
[2,3,0]
- 解释:以元音开头和结尾的字符串是 "aba"、"ece"、"aa" 和 "e" 。
查询
[0,2]
结果为2
(字符串 "aba" 和 "ece")。 查询[1,4]
结果为3
(字符串 "ece"、"aa"、"e")。 查询[1,1]
结果为0
。 返回结果[2,3,0]
。
用例2:
- 输入:words = ["a","e","i"], queries = [[0,2],[0,1],[2,2]]
- 输出:[3,2,1]
- 解释:每个字符串都满足这一条件,所以返回 [3,2,1] 。
# 思路
参考代码中的注释
# 代码实现
/**
* @param {string[]} words
* @param {number[][]} queries
* @return {number[]}
*/
// 输入
var __readline = require("readline-sync");
__readline.setDefaultOptions({prompt: ""});
var readline = __readline.prompt;
console.log("请输入words数组: ");
let words = readline().split(",");
console.log("请输入queries数组: ");
let queries = readline().split(" ").map(Number);
var vowelStrings = function(words, queries) {
// [1, 0, 1, 1, 1]
// [0, 1, 2, 3, 4]
// 先求words每个word是不是符合条件的
// 如果是,w数组对应位置就设置为1,如果不是就设置为0
let w = new Array(words.length).fill(0);
for(let i = 0; i < words.length; i ++){
const word = words[i];
if(check(word)){
w[i] = 1;
}
else{
w[i] = 0;
}
}
let res = [];
for(let i = 0; i < queries.length; i ++){
const query = queries[i];
// cnt统计query的符合条件的值
let cnt = 0;
// 遍历query[0]到query[1]
// 判断w是否为1
for(let j = query[0]; j <= query[1]; j ++){
if(w[j] == 1){
cnt ++;
}
}
// 遍历完一个query后把cnt放到res数组中
res.push(cnt);
}
return res;
};
var check = (word) => {
let end = word.length - 1;
let yuanyin = ['a', 'e', 'i', 'o', 'u'];
if(yuanyin.indexOf(word[end]) != -1 && yuanyin.indexOf(word[0]) != -1){
// 符合条件
return true;
}
// 不符合条件
return false;
}
const res = vowelStrings(words, queries);
console.log("结果为: ", res);
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
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
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75