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;
    }
};
相关推荐
zihan5183 小时前
理论:构建“基于客观事实、可量化、闭环自给自足”的个人操作系统
笔记·职场和发展·学习方法
老赵的博客4 小时前
c++QT之动态库加载常见报错
c++·qt
wabs6664 小时前
关于二叉树【429.N叉树的层序遍历的思考】
数据结构·c++·算法·leetcode·二叉树
hetao17338374 小时前
2026-09-08 hetao1733837 的刷题记录
c++·算法
码匠许师傅4 小时前
【设计模式精讲】25.状态模式(State)
c++·ui·设计模式·状态模式·uml
C++ 老炮儿的技术栈4 小时前
MFC CPtrArray的用法
开发语言·数据结构·c++·算法·mfc·c
佳児素花痴╮4 小时前
C++基础速通
开发语言·c++
小鱼爱吃草灬灬4 小时前
实时面试辅助排查清单:音频来源、问题输入与上下文
面试·职场和发展·音视频
weixin_446260854 小时前
CABAL:用于追踪同行评审中合谋投标影响的多智能体仿真框架
人工智能·算法·机器学习
不会就选b4 小时前
算法日常・每日刷题--<贪心>6
数据结构·算法·leetcode