国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

LeetCode 2559. 統(tǒng)計范圍內(nèi)的元音字符串數(shù):前綴和

這篇具有很好參考價值的文章主要介紹了LeetCode 2559. 統(tǒng)計范圍內(nèi)的元音字符串數(shù):前綴和。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

【LetMeFly】2559.統(tǒng)計范圍內(nèi)的元音字符串數(shù)

力扣題目鏈接:https://leetcode.cn/problems/count-vowel-strings-in-ranges/

給你一個下標從 0 開始的字符串數(shù)組 words 以及一個二維整數(shù)數(shù)組 queries 。

每個查詢 queries[i] = [li, ri] 會要求我們統(tǒng)計在 words 中下標在 liri 范圍內(nèi)(包含 這兩個值)并且以元音開頭和結(jié)尾的字符串的數(shù)目。

返回一個整數(shù)數(shù)組,其中數(shù)組的第 i 個元素對應第 i 個查詢的答案。

注意:元音字母是 'a'、'e'、'i''o''u' 。

?

示例 1:

輸入:words = ["aba","bcb","ece","aa","e"], queries = [[0,2],[1,4],[1,1]]
輸出:[2,3,0]
解釋:以元音開頭和結(jié)尾的字符串是 "aba"、"ece"、"aa" 和 "e" 。
查詢 [0,2] 結(jié)果為 2(字符串 "aba" 和 "ece")。
查詢 [1,4] 結(jié)果為 3(字符串 "ece"、"aa"、"e")。
查詢 [1,1] 結(jié)果為 0 。
返回結(jié)果 [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個單詞中,有多少個單詞的首字母和尾字母都是元音字母。

暴力求解肯定會超時,因此這就需要使用一個技巧,叫“前綴和”。

假設(shè)words中有n個單詞,那么我們創(chuàng)建一個長度為n+1的數(shù)組prefix,prefix[0] = 0。

p r e f i x [ i + 1 ] prefix[i + 1] prefix[i+1]代表words的下標0到i的單詞中首尾都是元音字母的單詞個數(shù),

那么 p r e f i x [ r + 1 ] ? p r e f i x [ l ] prefix[r + 1] - prefix[l] prefix[r+1]?prefix[l]就是words的l到r中首尾都是元音字母的單詞個數(shù)。

并且prefix[i + 1]可以由prefix[i]和words[i]很輕松地得到。

  • 時間復雜度 O ( l e n ( w o r d s ) + l e n ( q u e r i e s ) ) O(len(words) + len(queries)) O(len(words)+len(queries))
  • 空間復雜度 O ( l e n ( w o r d s ) ) O(len(words)) O(len(words))

AC代碼

C++
inline bool isYuan(char c) {
    return c == 'a' || c == 'e' || c == 'i' || c == 'o' || c == 'u';
}

class Solution {
public:
    vector<int> vowelStrings(vector<string>& words, vector<vector<int>>& queries) {
        vector<int> prefix(words.size() + 1, 0);
        for (int i = 0; i < words.size(); i++) {
            prefix[i + 1] = prefix[i] + (isYuan(words[i][0]) && isYuan(words[i].back()));  // 這里&&外必須加括號,不然會先執(zhí)行prefix[i] + isYuan(words[i][0]),再將結(jié)果于isYuan(words[i].back())做與運算
            // printf("prefix[%d] = %d, prefix[%d] = %d\n", i, prefix[i], i + 1, prefix[i + 1]);  //**********
        }
        // for (int t : prefix) {printf("%d ", t);} puts("");  //**********
        vector<int> ans(queries.size());
        for (int i = 0; i < queries.size(); i++) {
            ans[i] = prefix[queries[i][1] + 1] - prefix[queries[i][0]];
        }
        return ans;
    }
};
Python
# from typing import List

def isYuan(c: str) -> bool:
    return c == 'a' or c == 'e' or c == 'i' or c == 'o' or c == 'u'

class Solution:
    def vowelStrings(self, words: List[str], queries: List[List[int]]) -> List[int]:
        prefix = [0] * (len(words) + 1)
        for i in range(len(words)):
            prefix[i + 1] = prefix[i] + (isYuan(words[i][0]) and isYuan(words[i][-1]))
        return [prefix[q[1] + 1] - prefix[q[0]] for q in queries]

同步發(fā)文于CSDN,原創(chuàng)不易,轉(zhuǎn)載請附上原文鏈接哦~
Tisfy:https://letmefly.blog.csdn.net/article/details/131014779文章來源地址http://www.zghlxwxcb.cn/news/detail-469057.html

到了這里,關(guān)于LeetCode 2559. 統(tǒng)計范圍內(nèi)的元音字符串數(shù):前綴和的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務(wù),不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包