跳到主要内容

2559.统计范围内的元音字符串数

链接:2559.统计范围内的元音字符串数
难度:Medium
标签:数组、字符串、前缀和
简介:给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。返回一个整数数组,其中数组的第 i 个元素对应第 i 个查询的答案。

题解 1 - cpp

  • 编辑时间:2023-02-05
  • 执行用时:128ms
  • 内存消耗:63.1MB
  • 编程语言:cpp
  • 解法介绍:前缀和。
class Solution {
public:
vector<int> vowelStrings(vector<string>& words, vector<vector<int>>& queries) {
int n = words.size();
vector<int> sums(1, 0), ans;
unordered_set<char> s;
s.insert('a');
s.insert('e');
s.insert('i');
s.insert('o');
s.insert('u');
for (auto &w : words) {
bool f = s.count(w[0]) && s.count(w[w.size() - 1]);
sums.push_back(sums.back() + f);
}
for (auto &q : queries) {
ans.push_back(sums[q[1] + 1] - sums[q[0]]);
}
return ans;
}
};

题解 2 - python

  • 编辑时间:2023-02-05
  • 执行用时:80ms
  • 内存消耗:46.7MB
  • 编程语言:python
  • 解法介绍:同上。
class Solution:
def vowelStrings(self, words: List[str], queries: List[List[int]]) -> List[int]:
s = {'a', 'e', 'i', 'o', 'u'}
sums = list(accumulate(
(w[0] in s and w[-1] in s for w in words), initial=0))
return [sums[r + 1] - sums[l] for l, r in queries]

题解 3 - rust

  • 编辑时间:2023-02-05
  • 执行用时:28ms
  • 内存消耗:14.1MB
  • 编程语言:rust
  • 解法介绍:同上。
impl Solution {
pub fn vowel_strings(words: Vec<String>, queries: Vec<Vec<i32>>) -> Vec<i32> {
use std::collections::HashSet;
let mut set = HashSet::<char>::new();
for c in "aeiou".to_string().chars().collect::<Vec<char>>() {
set.insert(c);
}
let mut sums = vec![0; 1];
for w in words {
let w = w.chars().collect::<Vec<char>>();
let f = if set.contains(w.first().unwrap()) && set.contains(w.last().unwrap()) {
1
} else {
0
};
sums.push(f + *sums.last().unwrap());
}
let mut ans = vec![];
for q in queries {
ans.push(sums[q[1] as usize + 1] - sums[q[0] as usize]);
}
ans
}
}

题解 4 - cpp

  • 编辑时间:2023-06-02
  • 执行用时:148ms
  • 内存消耗:63.1MB
  • 编程语言:cpp
  • 解法介绍:前缀和。
class Solution {
public:
vector<int> vowelStrings(vector<string>& words, vector<vector<int>>& queries) {
unordered_set<char> s{ 'a', 'e', 'i', 'o', 'u'};
vector<int> sums(1, 0);
for (auto &w : words) sums.push_back(sums.back() + (s.count(w[0]) && s.count(w.back()) ? 1 : 0));
vector<int> res;
for (auto &q : queries) res.push_back(sums[q[1] + 1] - sums[q[0]]);
return res;
}
};