ETH官方钱包

前往
大廳
主題

LeetCode - 2559. Count Vowel Strings in Ranges 解題心得

Not In My Back Yard | 2024-01-13 12:00:05 | 巴幣 0 | 人氣 55

題目連結(jié):


題目意譯:
你被給定一個(gè)索引值從 0 開始的字串陣列 words 以及一個(gè)二維整數(shù)陣列 queries。

每一筆詢問(wèn) queries[i] = [li, ri] 要求我們要找到 words 中位於 li(含)到 ri(含)這個(gè)範(fàn)圍中有多少字串是以母音作為開頭以及結(jié)尾。

回傳一個(gè)大小為 queries.length 陣列 ans,其中 ans[i] 為第 i 筆詢問(wèn)的答案。

注意到母音字母為 'a' 、 'e' 、 'i' 、 'o' 和 'u'。

限制:
1 ≦ words.length ≦ 10 ^ 5
1 ≦ words[i].length ≦ 40
words[i] 只由小寫英文字母組成。
sum(words[i].length) ≦ 3 × 10 ^ 5
1 ≦ queries.length ≦ 10 ^ 5
0 ≦ li ≦ ri < words.length



範(fàn)例測(cè)資:
範(fàn)例 1:
輸入: words = ["aba","bcb","ece","aa","e"], queries = [[0,2],[1,4],[1,1]]
輸出: [2,3,0]
解釋: 以一個(gè)母音字母開頭和結(jié)尾的字串為 "aba" 、 "ece" 、 "aa" 和 "e"。
詢問(wèn) [0,2] 的答案為 2(字串 "aba" 和 "ece")。
詢問(wèn) [1,4] 的答案為 3(字串 "ece" 、 "aa" 和 "e")。
詢問(wèn) [1,1] 的答案為 0。
我們回傳 [2,3,0]。

範(fàn)例 2:
輸入: words = ["a","e","i"], queries = [[0,2],[0,1],[2,2]]
輸出: [3,2,1]
解釋: 每一個(gè)字串都滿足條件,所以我們回傳 [3,2,1]。


解題思維:
如果把符合條件的字串當(dāng)作 1、不符合的當(dāng)作 0,則我們可以把 words 轉(zhuǎn)成一個(gè)只有 0 和 1 的整數(shù)陣列。並且任何一筆詢問(wèn)的答案即是這個(gè)陣列中對(duì)應(yīng)區(qū)間的數(shù)字總和。

因此我們可以為這個(gè)新建的整數(shù)陣列另外建立一個(gè)前綴和(Prefix Sums)來(lái)快速地算出任一區(qū)間之總和,如這題

接著對(duì)於任意一筆詢問(wèn)只要按照前綴和來(lái)計(jì)算區(qū)間總和即是該筆詢問(wèn)的答案,最後放到陣列 ans 的對(duì)應(yīng)位置即是所求。




此次分享到此為止,如有任何更加簡(jiǎn)潔的想法或是有說(shuō)明不清楚之地方,也煩請(qǐng)各位大大撥冗討論。

創(chuàng)作回應(yīng)

追蹤 創(chuàng)作集

作者相關(guān)創(chuàng)作

更多創(chuàng)作