Loading

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

image

可以用前缀和解。
首先建立一个前缀和数组prefix,令nwords的长度,那么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()
    }
}
posted @ 2023-06-03 12:59  烤肉kr  阅读(3)  评论(0编辑  收藏  举报