使用kotlin完成这个题目:2559. 统计范围内的元音字符串数 提示 中等 30 相关企业 给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。 每个查询 queries[i] = [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内(包含 这两个值)并且以元音开头和结尾的字符串的数目。 返回一个整数数组,其中数组的第 i 个元素对应第 i 个查询的答案。 注意:元音字母是 'a'、'e'、'i'、'o' 和 'u' 。 示例 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] 。
时间: 2024-03-01 20:51:09 浏览: 99
以下是使用 Kotlin 实现的代码:
```
class Solution {
fun countVowelStrings(words: Array<String>, queries: Array<IntArray>): IntArray {
val result = IntArray(queries.size)
val dp = Array(words.size + 1) { IntArray(6) }
for (i in 1..words.size) {
dp[i][1] = 1
}
for (i in 1..words.size) {
for (j in 2..5) {
dp[i][j] = dp[i - 1][j] + dp[i][j - 1]
}
}
for (i in queries.indices) {
val l = queries[i][0]
val r = queries[i][1]
var sum = 0
for (j in 1..5) {
sum += dp[r + 1][j] - dp[l][j - 1]
}
result[i] = sum
}
return result
}
}
```
解题思路:
这道题可以用动态规划的思想来解决。我们可以用一个二维数组来维护以每个字符串结尾且以元音字母开头的字符串个数,然后对于每个查询,我们可以通过前缀和的思想来计算出区间内以元音字母开头和结尾的字符串个数。具体实现见代码注释。
阅读全文