Loading

LC1513 全1子串数

题面

LC1513

代码

class Solution:
    def numSub(self, s: str) -> int:
        subLens = []
        count = 0
        for i in range(len(s)):
            if s[i] == '1':
                count+=1
            elif s[i] == '0':
                subLens.append(count)
                count = 0

        subLens.append(count)

        # 计算组合数
        cache = {}
        def calc(n: int) -> int:
            try:
                return cache[n]
            except:
                res = n*(n+1)/2
                cache[n] = res
                return res

        res=0
        for slen in subLens:
            res += calc(slen)
        return int(res % (10**9+7))

思路

  • 尝试cache等差数列求和的结果,但是GPT说没有必要
  • 直接扫描找出连续全1的子区间长度,然后计算等差数列的和就可以了
    待续
posted @ 2025-11-17 11:59  kozumi  阅读(5)  评论(0)    收藏  举报