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

力扣1513——仅含 1 的子串数

题目

给你一个二进制字符串 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

思路

对于一段连续的1,子串数满足等差数列求和
找规律:
// “1” 11
// “11” 3
2+1
// “111” 63+2+1
// “1111” 10 4+3+2+1
// “11111” 15
5+4+3+2+1
因此只要计算字符串有几个连续的1即可,在计算其等差和,等差数列求和公式
sum=n*(n+1)/2
有个小坑是计算等差数列时, number_ones * (number_ones + 1)会超int范围,因此需要用long接住在取模转int

代码

class Solution {public int numSub(String s) {char[] arr_s = s.toCharArray();int sum = 0;int number_ones = 0;for (char arr : arr_s) {if (arr == '1') {number_ones++;} else {if (number_ones != 0){int a = (int) (((double) ((long) number_ones * (number_ones + 1)) / 2)%(Math.pow(10,9)+7));sum+= (int) (a%(Math.pow(10,9)+7));}number_ones = 0;}}if (number_ones != 0)sum+= (int) (((double) (number_ones * (number_ones + 1)) /2)%(Math.pow(10,9)+7));return sum;}
}
http://www.dtcms.com/a/617691.html

相关文章:

  • Kali Linux 中对某(靶机)监控设备进行漏洞验证的完整流程(卧室监控学习)
  • 将LabelMe工具目标检测标注生成的json文件转换成COCO json格式
  • 什么是求解器?
  • 课后作业-2025年11月16号作业
  • C#面试题及详细答案120道(116-120)-- 综合应用
  • 【报错解决】宝塔nginx404
  • 生信数据分析流程自动化:Snakemake实战全攻略
  • 网站建设什么专业重庆品牌餐饮加盟网站建设
  • 数据库 搭建 网站泉州手机网站建设价格
  • 小米电脑管家 V5.2.0.207 新版分享,镜像链接更稳定,AI自动亮度上线,分布式文件开放使用
  • 深入理解 Vue 3 中的计算属性与侦听器:联系、区别及与函数的对比
  • 2.FPGA板卡通过电脑映射连接上网
  • RTCP包之SR和RR
  • 40 token
  • 如何在 Celestia 区块链上构建验证者节点的详细手册
  • Linux权限知识点
  • MySQL: 数据库读写分离与负载均衡的实现方式及深度分析
  • 红帽企业Linux:企业级开源操作系统领航者
  • 怎么做网站开发建一个电商平台多少钱
  • 人工智能技术- 语音语言- 05 GPT-4o 自然人机对话
  • HarmonyOS实用指南:harmonyos + 华为
  • 什么是Spring Boot 应用开发?
  • uniapp实现android/IOS消息推送
  • 汽车网站开发流程html5 网站开发软件
  • HarmonyOS:harmonyos从入门到落地
  • OpenCV(二十九):高通滤波-索贝尔算子
  • 幽冥大陆(二十一)go语言智慧农业电子秤读取——东方仙盟炼气期
  • 北京网站建设需要花多少钱视觉冲击力的网站设计
  • 开发板上搭建nextcloud和minio服务
  • Dubbo监控中心全解析:构建微服务可观测性的基石