leetcode 1513 仅含1的子串数

一、题目描述

二、解题思路

解法一:双指针枚举(超时)

采用双指针来枚举所有可能的子串,并用step来记录子串的数量。

解法二:找规律

我们可以采用找规律来解决这个问题,长度为n全为'1'的字符串,有n(n+1)/2个全为'1'的子字符串,所以我们可以利用这个规律,一次遍历s,在过程中统计连续'1'的个数,实时计算仅含'1'的子串的数量。

三、代码实现

解法一:双指针枚举(超时)

cpp 复制代码
class Solution {
public:
    int numSub(string s) {
        //双指针
        int step=0;
        for(int left=0;left!=s.size();left++)
            for(int right=left;right!=s.size();right++){
                if(s[right]=='1') step++;
                else if(s[right]!='1') break;
            }
        return step;
    }
};

解法二:找规律

cpp 复制代码
class Solution {
public:
    int numSub(string s) {
        int ret=0;
        int mod=1e9+7;
        long long count_one=0;

        for(int current=0;current!=s.size();current++){
            if(s[current]=='1') count_one++;
            else{
                ret+=(count_one*(count_one+1)/2)%mod;
                count_one=0;
            }
        }
        //处理最后一段
        ret+=(count_one*(count_one+1)/2)%mod;
        return ret;
    }
};
相关推荐
吠品4 分钟前
Flutter 工程配本地 Maven 引 AAR,仓库声明为啥不生效
c语言·人工智能·算法
罗湖老棍子8 分钟前
【例题1】黑暗城堡(信息学奥赛一本通- P1486)
算法·图论·最短路·dijkstra·最小生成树·最短路径生成树
布莱克60517 分钟前
QtWidgets 与 QML:两大 UI 开发框架的全面对比
开发语言·c++·qt·ui·架构
hetao173383724 分钟前
2026-10-20 hetao1733837 的刷题记录
c++·算法
wenyq71 小时前
LeetCode 123. Best Time to Buy and Sell Stock III
leetcode
x10n92 小时前
微软 VC++ 运行库合集VCRedistPack
开发语言·c++·microsoft·vc++运行库·dll报错
qz_Serene2 小时前
C++:string(底层,常用接口,具体题目,模拟实现)
开发语言·c++
碧海银沙音频科技研究院2 小时前
基于ATS308X的无线语音交互对话功能实现
人工智能·嵌入式硬件·深度学习·算法
king13598745502 小时前
LiteRT Tensor API:C++ 编写端侧模型图,XNNPACK、GPU 与 NPU 怎么选?
开发语言·c++·人工智能·chatgpt·架构·aigc