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;
    }
};
相关推荐
D_evil__1 天前
【Effective Modern C++】第二章 auto:6. 当auto推导的类型不符合要求时,使用显式类型初始化习惯用法
c++
努力学算法的蒟蒻1 天前
day61(1.20)——leetcode面试经典150
面试·职场和发展
夏鹏今天学习了吗1 天前
【LeetCode热题100(87/100)】最小路径和
算法·leetcode·职场和发展
哈哈不让取名字1 天前
基于C++的爬虫框架
开发语言·c++·算法
Lips6111 天前
2026.1.20力扣刷题笔记
笔记·算法·leetcode
2501_941329721 天前
YOLOv8-LADH马匹检测识别算法详解与实现
算法·yolo·目标跟踪
洛生&1 天前
Planets Queries II(倍增,基环内向森林)
算法
剑锋所指,所向披靡!1 天前
C++之类模版
java·jvm·c++
小郭团队1 天前
1_6_五段式SVPWM (传统算法反正切+DPWM2)算法理论与 MATLAB 实现详解
嵌入式硬件·算法·matlab·dsp开发
小郭团队1 天前
1_7_五段式SVPWM (传统算法反正切+DPWM3)算法理论与 MATLAB 实现详解
开发语言·嵌入式硬件·算法·matlab·dsp开发