可以用前缀和
解。
首先建立一个前缀和数组prefix
,令n
为words
的长度,那么prefix
的长度就是n + 1
。(将下标0空出来)
然后遍历words
中的每一项,如果该项符合规则,则prefix[i] = prefix[i - 1] + 1
,否则prefix[i] = prefix[i - 1
。(意味着,这个位置有一个字符串可以提供1个贡献)
最后遍历queries
中的每一项query
,(我们前面将下标0空出来,因此整体下标右移了一位),令l = query[i][0] + 1, r = query[i][1] + 1
。
对于这个query
,答案就是prefix[r] - prefix[l - 1]
。
use std::collections::{HashMap, HashSet};
impl Solution {
pub fn vowel_strings(words: Vec<String>, queries: Vec<Vec<i32>>) -> Vec<i32>
{
fn check(word: &str) -> bool {
let chars = word.as_bytes();
[b'a', b'e', b'i', b'o', b'u'].contains(&chars[0]) &&
[b'a', b'e', b'i', b'o', b'u'].contains(&chars[chars.len() - 1])
}
let n = words.len();
let mut prefix = vec![0; n + 1];
for i in 1..=n {
prefix[i] = prefix[i - 1] + if check(&words[i - 1]) {1} else {0};
}
queries.into_iter().map(|query| prefix[query[1] as usize + 1] - prefix[query[0] as usize]).collect()
}
}
标签:chars,字符串,prefix,let,2023.6,words,元音,query,Vec
From: https://www.cnblogs.com/st0rmKR/p/17453842.html