每日1题 -统计范围内的元音字符串数

 


我的二分法插入代码如下↓

class Solution:
    def vowelStrings(self, words: List[str], queries: List[List[int]]) -> List[int]:

        vowels_word_indexes=[]
        ans_list=[]

        for i in range(len(words)):
            if self.Judge(words[i]):
                vowels_word_indexes.append(i)
            else:
                pass
        
        if len(vowels_word_indexes)==0:
            return [0]*len(queries)
        
        for start,end in queries:
            start_index,end_index=self.CountNumber(vowels_word_indexes,start,end)
            ans_list.append(end_index-start_index+1)

        return ans_list


    def Judge(self,word):
        vowels=['a','e','i','o','u']
        if word[0] in vowels and word[-1] in vowels:
            return True
        else:
            return False


    def CountNumber(self,vowels_word_indexes,start,end):

        start_flag=0
        end_flag=0

        l=len(vowels_word_indexes)


        # start_index

        if start<=vowels_word_indexes[0]:
            start_index=0
        else:

            left=0
            right=l-1

            while left<=right:
                mid=floor((left+right)/2)

                if vowels_word_indexes[mid]==start:
                    start_index=mid
                    start_flag=1
                    break
                elif vowels_word_indexes[mid]<start:
                    left=mid+1
                else:
                    right=mid-1
            
            if start_flag==0:
                start_index=max(left,mid,right)


        # end_index
        if end>=vowels_word_indexes[-1]:
            end_index=l-1
        else:

            left=0
            right=l-1

            while left<=right:
                mid=floor((left+right)/2)

                if vowels_word_indexes[mid]==end:
                    end_index=mid
                    end_flag=1
                    break
                elif vowels_word_indexes[mid]<end:
                    left=mid+1
                else:
                    right=mid-1

            if end_flag==0:
                end_index=min(left,mid,right)

        return start_index,end_index

官方题解:前缀和

class Solution:
    def vowelStrings(self, words: List[str], queries: List[List[int]]) -> List[int]:
        def isVowelString(word):
            return isVowelLetter(word[0]) and isVowelLetter(word[-1])

        def isVowelLetter(c):
            return c == 'a' or c == 'e' or c == 'i' or c == 'o' or c == 'u'

        n = len(words)
        prefix_sums = [0] * (n + 1)
        for i in range(n):
            value = 1 if isVowelString(words[i]) else 0
            prefix_sums[i + 1] = prefix_sums[i] + value
        ans = []
        for i in range(len(queries)):
            start, end = queries[i]
            ans.append(prefix_sums[end + 1] - prefix_sums[start])
        return ans
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值