当前位置: 首页 > news >正文

LeetCode刷题---字符串---1513

仅含1的子串数

1513. 仅含 1 的子串数 - 力扣(LeetCode)

题目:

给你一个二进制字符串 s(仅由 '0' 和 '1' 组成的字符串)。

返回所有字符都为 1 的子字符串的数目。

由于答案可能很大,请你将它对 10^9 + 7 取模后返回。

示例 1:

输入:s = "0110111"
输出:9
解释:共有 9 个子字符串仅由 '1' 组成
"1" -> 5 次
"11" -> 3 次
"111" -> 1 次

示例 2:

输入:s = "101"
输出:2
解释:子字符串 "1" 在 s 中共出现 2 次

示例 3:

输入:s = "111111"
输出:21
解释:每个子字符串都仅由 '1' 组成

示例 4:

输入:s = "000"
输出:0

提示:

  • s[i] == '0' 或 s[i] == '1'
  • 1 <= s.length <= 10^5
自己的思路和代码:
思路:

        1111中包含1个1111,2个111,3个11,4个1。我们就可以看出规律了。k个连续的1中一共包含 (k + 1)* k / 2 个子串(等差数列的求和公式)。找到这个规律就简单了。

代码:
class Solution {
public:
    int P = 1000000007;

    int numSub(string s) {
        long sum = 0;

        bool flag = false;
        long temp;
        for (int i = 0; i < s.size(); i++) {
            if (!flag && s[i] == '1') {
                if (i == s.size() - 1)
                    return (++sum) % P;
                flag = true;
                temp = 1;
            } else if (flag && s[i] == '1') {
                if (i != s.size() - 1) {
                    temp++;
                } else {
                    temp++;
                    // for (int j = 0; j <= temp; j++) {
                    //     sum += j;
                    // }
                    sum += temp * (temp + 1) / 2;
                    sum = sum % P;
                    return sum;
                }

            } else if (flag && s[i] == '0') {
                flag = false;
                // for (int j = 0; j <= temp; j++) {
                //     sum += j;   
                // }
                // sum = sum % P;
                sum += temp * (temp + 1) / 2;
                sum = sum % P;
            }
        }

        return sum;
    }
};

相关文章:

  • easyexcel解析excel文件的时候报错
  • Spring Cloud-Sentinel
  • day11旅途短视频录制
  • AIGC图生视频保姆级教程
  • java基本语法
  • 什么是AI Agent的身份安全问题
  • 自学FOC系列分享--BLDC的电驱
  • S4D480 S4HANA 基于PDF的表单打印
  • 量子计算的五大优势
  • 盲注技术获取数据库的表名、列名和数据
  • 数据结构6
  • 【kafka系列】Kafka如何保证消息不丢失?
  • ABC393E/F简要题解
  • 【DeepSeek-R1】 API申请(火山方舟联网版)
  • Mongodb数据管理
  • 数据结构与算法面试专题——堆排序
  • 蓝桥练习生
  • HTML【详解】input 标签
  • Linux系统中常见的词GNU是什么意思?
  • 虚拟机安装k8s集群
  • 做淘宝客网站一定要备案吗/软文范例100例
  • 如何建设网站 知乎/网上做推广怎么收费
  • 大连在哪个网站做网上核名/厦门网站综合优化贵吗
  • 网站彩票做号/站长工具seo综合查询降级
  • 做网站链接/深圳网络运营推广公司
  • 合肥网站建设哪里好/百度快速排名用什