【039】2559. 统计范围内的元音字符串数【前缀和】

给你一个下标从 0 开始的字符串数组 words 以及一个二维整数数组 queries 。
每个查询 queries[i] = [li, ri] 会要求我们统计在 words 中下标在 li 到 ri 范围内(包含 这两个值)并且以元音开头和结尾的字符串的数目。
返回一个整数数组,其中数组的第 i 个元素对应第 i 个查询的答案。
注意:元音字母是 ‘a’、‘e’、‘i’、‘o’ 和 ‘u’ 。

https://leetcode.cn/problems/count-vowel-strings-in-ranges/

连续区间段的查询

/*
 * Copyright (c) Huawei Technologies Co., Ltd. 2023-2023. All rights reserved.
 */

package com.huawei.prac;

import java.util.Arrays;

public class Solution9th {
    public static void main(String[] args) {
        String[] words = {"aba", "bcb", "ece", "aa", "e"};
        int[][] queries = {{1, 3}};
        // System.out.println(Arrays.toString(vowelStrings(words, queries)));
        System.out.println(Arrays.toString(vowelStrings(new String[]{"aba", "i", "ece", "aa", "e"}, queries)));
    }

    /**
     * 2559. 统计范围内的元音字符串数【前缀和】
     *
     * @param words 字符串数组
     * @param queries 范围二维数组
     * @return 指定范围内元音字符串的数量
     */
    public static int[] vowelStrings(String[] words, int[][] queries) {
        int[] value = new int[words.length];
        for (int i = 0; i < words.length; i++) {
            String str = words[i].replaceAll("[aeiou]", "*");
            if (str.charAt(0) == '*' && str.charAt(str.length() - 1) == '*') {
                value[i] = 1;
            }
        }
        int[] preSum = new int[value.length];
        preSum[0] = value[0];
        for (int i = 1; i < value.length; i++) {
            preSum[i] = value[i] + preSum[i - 1];
        }
        int[] res = new int[queries.length];
        for (int i = 0; i < queries.length; i++) {
            if (queries[i][0] == 0) {
                res[i] = preSum[queries[i][1]];
                continue;
            }
            res[i] = preSum[queries[i][1]] - preSum[queries[i][0] - 1];
        }
        return res;
    }
}

你可能感兴趣的:(每日一题,java,leetcode,算法)