2559.统计范围内的元音字符串数:前缀和
【LetMeFly】2559.统计范围内的元音字符串数
力扣题目链接:https://leetcode.cn/problems/count-vowel-strings-in-ranges/
给你一个下标从 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] 。
提示:
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
方法一:前缀和
这道题说白了就是给出多次询问,每次问你第l到第r个单词中,有多少个单词的首字母和尾字母都是元音字母。
暴力求解肯定会超时,因此这就需要使用一个技巧,叫“前缀和”。
假设words中有n个单词,那么我们创建一个长度为n+1的数组prefix,prefix[0] = 0。
令$prefix[i + 1]$代表words的下标0到i的单词中首尾都是元音字母的单词个数
,
那么$prefix[r + 1] - prefix[l]$就是words的l到r中首尾都是元音字母的单词个数
。
并且prefix[i + 1]可以由prefix[i]和words[i]很轻松地得到。
- 时间复杂度$O(len(words) + len(queries))$
- 空间复杂度$O(len(words))$
AC代码
C++
1 |
|
Python
1 |
|
同步发文于CSDN,原创不易,转载请附上原文链接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/131014779
2559.统计范围内的元音字符串数:前缀和
https://blog.letmefly.xyz/2023/06/02/LeetCode 2559.统计范围内的元音字符串数/